Android 在Xamarin中使用本地数据库
我已经开始使用VisualStudio的Xamarin插件来创建Android应用程序Android 在Xamarin中使用本地数据库,android,sqlite,xamarin,xamarin.android,local-database,Android,Sqlite,Xamarin,Xamarin.android,Local Database,我已经开始使用VisualStudio的Xamarin插件来创建Android应用程序 我有一个本地SQL数据库,我想调用它来显示数据。我不知道我怎么能做到这一点。有可能吗?在认为这是一件小事之后,当我尝试设置一个快速测试项目时,我被证明是错误的。这篇文章将包含一个关于在Xamarin中为Android应用程序设置DB的完整教程,它将作为Xamarin未来用户的参考 一目了然: 将Sqlite.cs添加到项目中 将数据库文件添加为资产 将数据库文件设置为生成为AndroidAsset 手动将数据
我有一个本地SQL数据库,我想调用它来显示数据。我不知道我怎么能做到这一点。有可能吗?在认为这是一件小事之后,当我尝试设置一个快速测试项目时,我被证明是错误的。这篇文章将包含一个关于在Xamarin中为Android应用程序设置DB的完整教程,它将作为Xamarin未来用户的参考 一目了然:
AndroidAsset
。这将确保它包含在APK的资产目录中
4.从APK中手动复制DB。
由于数据库是作为资产(打包在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提取为二进制文件,并将其放入系统外部存储路径中。实际上,DB可以去任何你想去的地方,我只是选择把它放在这里
我还读到Android有一个数据库文件夹,可以直接存储数据库;我无法让它工作,所以我只是使用这种使用现有数据库的方法运行
5.打开数据库连接。
现在通过Sqlite.SqliteConnection类打开与DB的连接:
using (var conn = new SQLite.SQLiteConnection(dbPath))
{
// Do stuff here...
}
6.对数据库进行操作。
最后,由于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);
}
公共类相册
{
[主密钥,自动增量]
public int AlbumId{get;set;}
公共字符串标题{get;set;}
公共int ArtistId{get;set;}
}
//其他代码。。。
使用(var conn=new SQLite.SQLiteConnection(dbPath))
{
var cmd=new SQLite.SQLiteCommand(conn);
cmd.CommandText=“从相册中选择*”;
var r=cmd.ExecuteQuery包含在Sqlite.net库中,它和Xamarin文档中的。这里是我正在使用的一个,它正在工作
- 安装Sqlite插件
- 创建用于访问不同平台服务的接口
- 为表创建一个模型
- 实现之前在所有
您想要使用的平台
- 使用插件在表上创建、获取、插入等
有关更多详细信息,请检查谢谢Matt,非常详细的回答。但是您能解释一下我如何将本地数据库复制到assets文件夹中吗?当然可以!当您创建Android项目时,assets文件夹是由Xamarin自动生成的。您应该在您的项目目录中找到它。例如:path\to\project\assets
。我刚刚到达ved正在工作,所以我现在还不能更新答案,今晚我会这样做。如果答案对你有帮助/解决了你的问题,接受它总是很好的。注意:我对一个相当大的数据库(约20mb)也有同样的问题。这个解决方案会不会导致数据库被复制,一次在apk中,一次在文件系统中?这是对用户空间的巨大浪费…[编辑]我问了一个单独的问题。@matthewrdev我是移动开发新手。你能告诉我在哪里编写上述代码吗?相关: