Visual StudioのXamarinプラグインを使用して、Androidアプリを作成し始めました。
ローカルSQLデータベースがあり、それを呼び出してデータを表示したい。どうすればいいのかわかりません。出来ますか?
これは簡単なことだと思った後、簡単なテストプロジェクトをセットアップしようとしたときに間違っていることがわかりました。この投稿には、XamarinのAndroidアプリ用のDBのセットアップに関する完全なチュートリアルが含まれます。これは、将来のXamarinユーザーの参照として役立ちます。
一目で:
このリポジトリ に移動して、Sqlite.csをダウンロードすることから始めます。これは、データベースに対してクエリを実行するために使用できるSqlite APIを提供します。ファイルをソースファイルとしてプロジェクトに追加します。
次に、DBを取得して、AndroidプロジェクトのAssetsディレクトリにコピーし、プロジェクトにインポートして、Assetsソリューション内のフォルダー:
この例では、 このサイト からdb.sqliteに名前を変更したChinook_Sqlite.sqliteデータベースサンプルを使用しています。
DBファイルを右クリックして、ビルドアクション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);
}
そして、それが既存のSqliteデータベースをAndroidのXamarinソリューションに追加する方法です!詳細については、Sqlite.netライブラリに含まれている examples 、Xamarinドキュメントの nit tests および examples をご覧ください。
私が使用しているものはここにあり、それは働いています
より詳細な情報を確認するには this