web-dev-qa-db-ja.com

Xamarinでローカルデータベースを使用する

Visual StudioのXamarinプラグインを使用して、Androidアプリを作成し始めました。

ローカルSQLデータベースがあり、それを呼び出してデータを表示したい。どうすればいいのかわかりません。出来ますか?

39
user2631662

これは簡単なことだと思った後、簡単なテストプロジェクトをセットアップしようとしたときに間違っていることがわかりました。この投稿には、XamarinのAndroidアプリ用のDBのセットアップに関する完全なチュートリアルが含まれます。これは、将来のXamarinユーザーの参照として役立ちます。

一目で:

  1. Sqlite.csをプロジェクトに追加します。
  2. データベースファイルをアセットとして追加します。
  3. AndroidAssetとしてビルドするようにデータベースファイルを設定します。
  4. データベースファイルをapkから別のディレクトリに手動でコピーします。
  5. Sqlite.SqliteConnectionを使用してデータベース接続を開きます。
  6. Sqliteを使用してデータベースを操作します。

Xamarinのローカルデータベースを設定するAndroidプロジェクト

1. Sqlite.csをプロジェクトに追加します。

このリポジトリ に移動して、Sqlite.csをダウンロードすることから始めます。これは、データベースに対してクエリを実行するために使用できるSqlite APIを提供します。ファイルをソースファイルとしてプロジェクトに追加します。

2. DBを資産として追加します。

次に、DBを取得して、AndroidプロジェクトのAssetsディレクトリにコピーし、プロジェクトにインポートして、Assetsソリューション内のフォルダー:

enter image description here

この例では、 このサイト からdb.sqliteに名前を変更したChinook_Sqlite.sqliteデータベースサンプルを使用しています。

3. DBを設定して、AndroidAssetとしてビルドします。

DBファイルを右クリックして、ビルドアクションAndroidAssetに設定します。これにより、APKのアセットディレクトリに含まれるようになります。

enter image description here

4. APKからDBを手動でコピーします。

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にはデータベースを直接保存するデータベースフォルダーがあります。動作させることができなかったため、既存のDBを使用するこの方法で実行しました。

5. DB接続を開きます。

次に、Sqlite.SqliteConnectionクラスを介してDBへの接続を開きます。

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

概要

そして、それが既存のSqliteデータベースをAndroidのXamarinソリューションに追加する方法です!詳細については、Sqlite.netライブラリに含まれている examples 、Xamarinドキュメントの nit tests および examples をご覧ください。

63
matthewrdev

私が使用しているものはここにあり、それは働いています

  • sqliteプラグインをインストールする
  • さまざまなプラットフォームサービスにアクセスするためのインターフェイスを作成する
  • テーブルのモデルを作成します
  • 使用するすべてのプラットフォームで、以前に作成したインターフェイスを実装します
  • プラグインを使用して、テーブルで作成、取得、挿入などを行います

より詳細な情報を確認するには this

1
Xamassassin