我已经开始使用 Visual Studio 的 Xamarin 插件来创建 Android 应用程序。
我有一个本地 SQL 数据库,我想调用它来显示数据。我不明白我怎么能做到这一点。可能吗?
我已经开始使用 Visual Studio 的 Xamarin 插件来创建 Android 应用程序。
我有一个本地 SQL 数据库,我想调用它来显示数据。我不明白我怎么能做到这一点。可能吗?
在认为这是一件微不足道的事情之后,当我尝试设置一个快速测试项目时,我被证明是错误的。这篇文章将包含有关在 Xamarin 中为 Android 应用程序设置数据库的完整教程,这将作为未来 Xamarin 用户的参考。
乍看上去:
首先访问此存储库并下载 Sqlite.cs;这提供了可用于对数据库运行查询的 Sqlite API。将该文件作为源文件添加到您的项目中。
接下来,获取您的数据库并将其复制到您的 Android 项目的 Assets 目录中,然后将其导入您的项目中,以便它出现在您的解决方案中的Assets文件夹下:
在整个示例中,我使用从该站点重命名为 db.sqlite 的 Chinook_Sqlite.sqlite 数据库示例。
右键单击 DB 文件并将其设置为 build action AndroidAsset
。这将确保它包含在 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 中提取出来,并将其放入系统外部存储路径中。实际上,数据库可以去任何你想去的地方,我只是选择把它放在这里。
我还读到 Android 有一个数据库文件夹,可以直接存储数据库;我无法让它工作,所以我只是用这种使用现有数据库的方法运行。
现在通过 Sqlite.SqliteConnection 类打开与数据库的连接:
using (var conn = new SQLite.SQLiteConnection(dbPath))
{
// Do stuff here...
}
最后,由于 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 库中包含的示例、其单元测试以及 Xamarin 文档中的示例。
这是我正在使用的那个,它正在工作
有关更多详细信息,请查看此