使用本地数据库Xamarin

问题描述 投票:39回答:2

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

我有一个本地SQL数据库,我想叫它来显示数据。我不知道怎样才能做到这一点。可能吗?

android sqlite xamarin xamarin.android local-database
2个回答
63
投票

经过思考,这是做一个简单的事情,当我试图建立一个快速的测试项目,我证明是错误的。这篇文章将载有关于Android应用在Xamarin会派上用场,作为未来Xamarin用户提供一个参考建立一个数据库的完整教程。

乍看上去:

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

Setting up a local database for a Xamarin Android project

1.添加Sqlite.cs到您的项目。

通过将this repository和下载Sqlite.cs启动;这提供了可以用来对你的数据库运行查询SQLite的API。将文件添加到您的项目作为源文件。

2.添加DB资产。

接下来,让你的数据库,并将其复制到你的Android项目的资产目录,然后使其显示您的解决方案中的资产文件夹下导入到项目中:

我使用改名为从this site整个这个例子db.sqlite的Chinook_Sqlite.sqlite数据库样本。

3.将DB构建作为AndroidAsset。

右键单击DB文件,并设置它来构建行动AndroidAsset。这将确保它被纳入APK的资产目录。

4.手动复制DB你的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有将直接存储数据库的一个数据库文件夹;我无法得到它的工作,所以我刚刚跑了使用现有数据库的这种方法。

5.打开DB连接。

现在打开通过Sqlite.SqliteConnection类到数据库的连接:

using (var conn = new SQLite.SQLiteConnection(dbPath))
{
        // Do stuff here...
}

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);
}

Summary

这就是如何将现有的SQLite数据库添加到Android版Google Xamarin的解决方案!欲了解更多信息,请查阅附带Sqlite.net库,其examples与Xamarin文档中的unit testsexamples


1
投票

下面是我使用的一个,它的工作

  • 安装sqlite的插件
  • 创建界面来访问不同平台的服务
  • 为表创建一个模型
  • 实现您之前在所有的平台上要使用创建的接口
  • 使用插件创建,获取,插入,等你的桌子上

更多详细信息检查this

© www.soinside.com 2019 - 2024. All rights reserved.