45

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

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

4

2 に答える 2

74

これは取るに足らないことだと思っていたのですが、簡単なテスト プロジェクトをセットアップしようとしたときに、私が間違っていることがわかりました。この投稿には、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フォルダーの下に表示されるようにします。

ここに画像の説明を入力

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

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

DB ファイルを右クリックし、 build action に設定しますAndroidAsset。これにより、APK のアセット ディレクトリに確実に含まれるようになります。

ここに画像の説明を入力

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

概要

以上が、Android 用の Xamarin ソリューションに既存の Sqlite データベースを追加する方法です。詳細については、Sqlite.net ライブラリに含まれている例、その単体テスト、およびXamarin ドキュメントの例を確認してください。

于 2013-09-10T13:18:21.953 に答える