在Xamarin中使用本地数据库

use*_*662 39 sqlite android local-database xamarin.android xamarin

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

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

mat*_*dev 63

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

乍看上去:

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

为Xamarin Android项目设置本地数据库

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

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

2.添加DB作为资产.

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

在此输入图像描述

我在整个这个例子中使用了从这个站点重命名为db.sqlite的Chinook_Sqlite.sqlite数据库示例.

3.将DB设置为AndroidAsset.

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

在此输入图像描述

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);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这将数据库从APK中提取为二进制文件,并将其放入系统外部存储路径.实际上,DB可以在任何你想要的地方去,我只是选择坚持这里.

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

5.打开数据库连接.

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

using (var conn = new SQLite.SQLiteConnection(dbPath))
{
        // Do stuff here...
}
Run Code Online (Sandbox Code Playgroud)

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);
}
Run Code Online (Sandbox Code Playgroud)

摘要

这就是如何将现有的Sqlite数据库添加到Android的Xamarin解决方案中!有关更多信息,请查看Sqlite.net库中包含的示例,其单元测试以及Xamarin文档中的示例.