Visual Studio 用の Xamarin プラグインを使用して Android アプリを作成し始めました。
ローカル SQL データベースがあり、それを呼び出してデータを表示したいと考えています。どうすればこれができるのかわかりません。出来ますか?
Visual Studio 用の Xamarin プラグインを使用して Android アプリを作成し始めました。
ローカル SQL データベースがあり、それを呼び出してデータを表示したいと考えています。どうすればこれができるのかわかりません。出来ますか?
これは取るに足らないことだと思っていたのですが、簡単なテスト プロジェクトをセットアップしようとしたときに、私が間違っていることがわかりました。この投稿には、Xamarin で Android アプリ用の DB をセットアップするための完全なチュートリアルが含まれており、将来の Xamarin ユーザーのリファレンスとして役立ちます。
概要:
まず、このリポジトリにアクセスして Sqlite.cs をダウンロードします。これにより、データベースに対してクエリを実行するために使用できる Sqlite API が提供されます。ファイルをソース ファイルとしてプロジェクトに追加します。
次に、DB を取得して Android プロジェクトの Assets ディレクトリにコピーし、プロジェクトにインポートして、ソリューション内のAssetsフォルダーの下に表示されるようにします。
この例では、このサイトの db.sqlite に名前を変更した Chinook_Sqlite.sqlite データベース サンプルを使用しています。
DB ファイルを右クリックし、 build action に設定します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 には、データベースを直接保存するデータベース フォルダーがあることも知りました。うまくいかなかったので、既存のDBを使用するこの方法で実行しました。
Sqlite.SqliteConnection クラスを介して DB への接続を開きます。
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);
}
以上が、Android 用の Xamarin ソリューションに既存の Sqlite データベースを追加する方法です。詳細については、Sqlite.net ライブラリに含まれている例、その単体テスト、およびXamarin ドキュメントの例を確認してください。