Monotouch - 在 monotouch 项目中附加 Sqlite 数据库并部署到 iPad

Posted

技术标签:

【中文标题】Monotouch - 在 monotouch 项目中附加 Sqlite 数据库并部署到 iPad【英文标题】:Monotouch - Attach Sqlite database in monotouch project and deploy to iPad 【发布时间】:2011-05-27 20:14:58 【问题描述】:

到目前为止,我发现的所有关于在 iPad/iPhone 应用程序中使用 Sqlite 数据库的代码示例都使用脚本在应用程序部署后创建数据库。

但是是否可以在 monotouch 中创建数据库、构建结构、甚至用数据预填充数据并将其与 iPad 应用程序一起部署?

如果是这样,数据库的位置是什么,我如何建立 Sqlite 连接? 目前我使用以下内容:

new SqliteConnection("Data Source=" + DatabasePath);

在哪里

public static String DatabasePath 
    get 
        string documents = Environment.GetFolderPath (Environment.SpecialFolder.Personal);
        return Path.Combine (documents, "MyDB.db");
    

【问题讨论】:

【参考方案1】:

您可以预先构建您的数据库copy it into the app bundle,并且(只要它是只读的)您可以随时从您的应用程序包中直接访问它。如果您需要写入权限,您可以将预构建的文件复制到 different directory,然后从那里进行修改。

【讨论】:

+1 - 我现在在一个项目中就是这样做的,而且效果很好。 好吧。我不太喜欢必须移动它才能写入数据库的事实,但我想就是这样。 写入数据库的最佳位置是什么? 我自己将它放在库目录中,除非您希望用户能够访问,然后在文档目录中。【参考方案2】:

对于使用 Monotouch 的人,这是我对这个问题进行排序的方式:

    使用 sqliteman 创建了 Sqlite 数据库 在 monodevelop 中,右键单击项目 > 添加 > 添加文件 选择创建的sqlite db并点击打开 点击警告对话框中的复制 右键单击刚刚添加的数据库 > 构建操作 > 内容

那么你所要做的就是创建一个简单的方法来将数据库复制到目标文件夹,比如 Documents:

public static void CopyDatabase(String destinationPath)

    String path = NSBundle.MainBundle.PathForResource("MyDB", "db");
    File.Copy(path, destinationPath);

在我的例子中,destinationPath 是上面在问题中指定的路径:Here .显然,在生产中你必须有某种机制来检查数据库是否已经存在,这样你就不会覆盖数据库文件。

希望对你有帮助。

【讨论】:

以上是关于Monotouch - 在 monotouch 项目中附加 Sqlite 数据库并部署到 iPad的主要内容,如果未能解决你的问题,请参考以下文章

Monotouch:了解委托机制模式

如何在 DialogViewController (Monotouch.Dialog) 上设置背景颜色

MonoTouch:播放声音

MonoTouch:StoryBoarding - 手动转场?

在 MonoTouch 中重命名命名空间

Monotouch 找不到 AudioFileOpenURL