我已经开始使用了Xamarin插件Visual Studio来创建一个Android应用程序。
我有一个本地SQL数据库,我想叫它来显示数据。我不知道怎样才能做到这一点。可能吗?
经过思考,这是做一个简单的事情,当我试图建立一个快速的测试项目,我证明是错误的。这篇文章将载有关于Android应用在Xamarin会派上用场,作为未来Xamarin用户提供一个参考建立一个数据库的完整教程。
乍看上去:
通过将this repository和下载Sqlite.cs启动;这提供了可以用来对你的数据库运行查询SQLite的API。将文件添加到您的项目作为源文件。
接下来,让你的数据库,并将其复制到你的Android项目的资产目录,然后使其显示您的解决方案中的资产文件夹下导入到项目中:
我使用改名为从this site整个这个例子db.sqlite的Chinook_Sqlite.sqlite数据库样本。
右键单击DB文件,并设置它来构建行动AndroidAsset
。这将确保它被纳入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);
}
}
}
}
这提取DB从APK二进制文件,并将其放置到系统外部存储路径。现实的DB可以去任何你想要的,我只是选择了在这里坚持下去。
我也读了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版Google Xamarin的解决方案!欲了解更多信息,请查阅附带Sqlite.net库,其examples与Xamarin文档中的unit tests的examples。
下面是我使用的一个,它的工作
更多详细信息检查this