在Xamarin中使用本地数据库
我已经开始使用Visual Studio的Xamarin插件来创build一个Android应用程序。
我有一个本地的SQL数据库,我想调用它来显示数据。 我不明白我能做到这一点。 可能吗?
在认为这是一件小事情之后,当我尝试设置一个快速testing项目时,我被certificate是错误的。 这篇文章将包含一个关于在Xamarin中设置一个Android应用程序数据库的完整教程,作为未来Xamarin用户的参考。
乍看上去:
- 将Sqlite.cs添加到您的项目。
- 将您的数据库文件添加为资产。
- 将您的数据库文件设置为AndroidAsset。
- 手动将数据库文件从您的apk中复制到另一个目录。
- 使用Sqlite.SqliteConnection打开数据库连接。
- 使用Sqlite在数据库上操作。
为Xamarin Android项目设置本地数据库
1.将Sqlite.cs添加到您的项目。
首先进入这个仓库并下载Sqlite.cs; 这提供了Sqlite API,您可以使用它来针对您的数据库运行查询。 将文件作为源文件添加到您的项目中。
2.添加数据库作为资产。
接下来,获取您的数据库并将其复制到您的Android项目的Assets目录中,然后将其导入到您的项目中,以使其显示在解决scheme中的Assets文件夹下:
在本例中,我使用从本站点重命名为db.sqlite的Chinook_Sqlite.sqlite数据库示例。
3.将数据库设置为AndroidAsset。
右键单击数据库文件并将其设置为构build操作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); } } } }
这会从APK中提取数据库作为二进制文件,并将其放入系统外部存储path。 实际上,数据库可以去任何你想要的,我只是select坚持它在这里。
我也读了Android有一个数据库文件夹,将直接存储数据库; 我无法得到它的工作,所以我刚刚运行这种使用现有的数据库的方法。
5.打开数据库连接。
现在通过Sqlite.SqliteConnection类打开一个到数据库的连接:
using (var conn = new SQLite.SQLiteConnection(dbPath)) { // Do stuff here... }
6.在DB上操作。
最后,由于Sqlite.net是一个ORM,您可以使用您自己的数据types在数据库上进行操作:
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解决scheme! 有关更多信息,请查看Sqlite.net库中包含的示例 ,其unit testing以及Xamarin文档中的示例 。