在Xamarin中使用本地数据库

时间:2013-09-10 09:46:21

标签: android sqlite xamarin xamarin.android local-database

我已经开始使用Visual Studio的Xamarin插件来创建Android应用程序。

我有一个本地SQL数据库,我想调用它来显示数据。我不明白我怎么做到这一点。有可能吗?

2 个答案:

答案 0 :(得分:62)

在认为这是一件微不足道的事情之后,当我尝试设置快速测试项目时,我被证明是错误的。这篇文章将包含一个关于在Xamarin中为Android应用程序设置数据库的完整教程,该教程将作为未来Xamarin用户的参考使用。

一目了然:

  1. 将Sqlite.cs添加到您的项目中。
  2. 将您的数据库文件添加为资产。
  3. 将您的数据库文件设置为构建为AndroidAsset。
  4. 将数据库文件从apk手动复制到另一个目录。
  5. 使用Sqlite.SqliteConnection打开数据库连接。
  6. 使用Sqlite对数据库进行操作。
  7. 为Xamarin Android项目设置本地数据库

    1。将Sqlite.cs添加到项目中。

    首先转到this repository并下载Sqlite.cs;这提供了可用于对数据库运行查询的Sqlite API。将文件作为源文件添加到项目中。

    2。添加DB作为资产。

    接下来,获取您的数据库并将其复制到Android项目的Assets目录中,然后将其导入到您的项目中,以便它显示在您的解决方案中的 Assets 文件夹下:

    enter image description here

    在整个示例中,我使用的是从this site重命名为db.sqlite的Chinook_Sqlite.sqlite数据库示例。

    3。将DB设置为AndroidAsset。

    右键单击数据库文件并将其设置为构建操作AndroidAsset。这将确保它包含在APK的资产目录中。

    enter image description here

    4。手动将DB从APK中复制。

    由于数据库作为资产包含(在APK中打包),您需要将其解压缩。

    您可以使用以下代码执行此操作:

    string dbName = "db.sqlite";
    string dbPath = Path.Combine (Android.OS.Environment.ExternalStorageDirectory.ToString (), dbName);
    // Check if your DB has already been extracted.
    if (!File.Exists(dbPath))
    {
        using (BinaryReader br = new BinaryReader(Android.App.Application.Context.Assets.Open(dbName)))
        {
            using (BinaryWriter bw = new BinaryWriter(new FileStream(dbPath, FileMode.Create)))
            {
                byte[] buffer = new byte[2048];
                int len = 0;
                while ((len = br.Read(buffer, 0, buffer.Length)) > 0)
                {
                    bw.Write (buffer, 0, len);
                }
            }
        }
    }
    

    这将数据库从APK中提取为二进制文件,并将其放入系统外部存储路径。实际上,DB可以随心所欲,我只是选择坚持下去。

    我还读到Android有一个数据库文件夹,可直接存储数据库;我无法让它工作,所以我只是使用这种使用现有数据库的方法。

    5。打开数据库连接。

    现在通过Sqlite.SqliteConnection类打开与DB的连接:

    using (var conn = new SQLite.SQLiteConnection(dbPath))
    {
            // Do stuff here...
    }
    

    6。在DB上操作。

    最后,由于Sqlite.net是一个ORM,您可以使用自己的数据类型对数据库进行操作:

    public class Album
    {
        [PrimaryKey, AutoIncrement]
        public int AlbumId { get; set; }
        public string Title { get; set; }
        public int ArtistId { get; set; }
    }
    
    // Other code...
    
    using (var conn = new SQLite.SQLiteConnection(dbPath))
    {
        var cmd = new SQLite.SQLiteCommand (conn);
        cmd.CommandText = "select * from Album";
        var r = cmd.ExecuteQuery<Album> ();
    
        Console.Write (r);
    }
    

    摘要

    这就是如何将现有的Sqlite数据库添加到Android的Xamarin解决方案中!有关详细信息,请查看Sqlite.net库中包含的examples,Xamarin文档中的unit testsexamples

答案 1 :(得分:1)

这是我正在使用并且正在运行的

  • 安装Sqlite插件
  • 创建界面以访问不同的平台服务
  • 为表格创建模型
  • 实施您先前在所有 您要使用的平台
  • 使用该插件在您的表格上创建,获取,插入等

有关更多详细信息,请检查this