2023/05/09 追記----------------
なんか、Androidで動かなくなったので調べていたら
Nugetで「SQLitePCLRaw.bundle_green」の追加インストールが必要でした
また、
/// <summary>
/// DBの作成ボタン
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SQLcreateBtn_Clicked(object sender, EventArgs e)
{
_dbCon = new SQLiteConnection(mkFullPath()); //メモリ上に_dbConを確保
_dbCon.CreateTable<VersionTbl>(); //VertionTblにそったテーブルを作成(既にテーブルが出来ていたら何もしない)
}
SQLcreateBtn_Clicked関数の SQLiteConnectionの引数の追加し、フラグを追加し、下のようにしてください
・・・・・このテストをしたときは上のソースで動いてたんだけどね・・・
/// <summary>
/// DBの作成ボタン
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SQLcreateBtn_Clicked(object sender, EventArgs e)
{
_dbCon = new SQLiteConnection(mkFullPath(), SQLite.SQLiteOpenFlags.Create | SQLite.SQLiteOpenFlags.ReadWrite | SQLite.SQLiteOpenFlags.SharedCache); //メモリ上に_dbConを確保
_dbCon.CreateTable<VersionTbl>(); //VertionTblにそったテーブルを作成(既にテーブルが出来ていたら何もしない)
}
追記おしまい----------------
うーん、いいことだ
ほぼ変更無し
こっちのページとやってる事はほぼ同じ
フォルダの指定の仕方がちょっと変わったくらいかな
NuGetでsqlite-net-pclを指定するところも一緒(バージョンも1.8.116でXamarinで使っているのと一緒)
フォームにボタンやらデバッグ用の確認ラベルや編集領域を配置
<!-- テーブルのクリエイト -->
<Button
x:Name="SQLcreateBtn"
Text="SQL Create"
Clicked="SQLcreateBtn_Clicked" />
<!-- データの書込 -->
<Button
x:Name="SQLWriteBtn"
Text="SQL Write"
Clicked="SQLWriteBtn_Clicked"/>
<!-- バージョンとして書き込む文字列を入力する -->
<Editor x:Name="version" MaxLength="16" />
<Button
x:Name="SQLReadBtn"
Text="SQL リード"
Clicked="SQLReadBtn_Clicked" />
<!-- 日付テーブルに書き込まれていたテキストを出力 -->
<Label x:Name="result_date" />
<!-- 日付テーブルに書き込まれていたバージョンを出力 -->
<Label x:Name="result_version" />
<!-- 日付テーブルに書き込まれていたカウンタを出力 -->
<Label x:Name="result_index" />
テスト用のテーブルクラスを作る
本当は複数カラムでのprimary keyにしたかったのだけど、MAUIにしたからと言ってsqlite-net-pclが突然対応するわけでもないので
インデックスをprimary keyの代わりに使っているくらい?
/// <summary>
/// テスト用のテーブルクラス
/// </summary><remarks>この型でテーブルを作る</remarks>
private class VersionTbl
{
/// <summary>インデックス1 ユニーク</summary>
[Indexed(Name = "verKey", Order = 1, Unique = true), MaxLength(20)]
public string datetime { get; set; }
/// <summary>インデックス2 ユニーク</summary>
[Indexed(Name = "verKey", Order = 2, Unique = true), MaxLength(20)]
public int index { get; set; }
public string Version { get; set; }
public int no { get; set; }
}
後はソースをゴリゴリ書いておしまい
まあ、アプリのデータフォルダーがFileSystem.Current.AppDataDirectoryに変わったくらい?
/// <summary>インデックスのつもり</summary>
int count = 0;
/// <summary>DBオブジェクト</summary>
private SQLiteConnection _dbCon = null;
/// <summary>DBファイル名</summary>
private const string DB_NAME = "testdb.db3";
/// <summary>アプリのデータフォルダ取得</summary>
private string _mainDir = FileSystem.Current.AppDataDirectory;
private string mkFullPath()
{
string _dbFullPath = Path.Combine(_mainDir, DB_NAME);
return _dbFullPath;
}
/// <summary>
/// DBの作成ボタン
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SQLcreateBtn_Clicked(object sender, EventArgs e)
{
_dbCon = new SQLiteConnection(mkFullPath()); //メモリ上に_dbConを確保
_dbCon.CreateTable<VersionTbl>(); //VertionTblにそったテーブルを作成(既にテーブルが出来ていたら何もしない)
}
/// <summary>
/// テーブルにデータの書込
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SQLWriteBtn_Clicked(object sender, EventArgs e)
{
if(_dbCon!= null)
{
return;
}
//クラスにデータを詰め込む
VersionTbl v = new VersionTbl();
v.datetime = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
v.Version = version.Text;
v.index = count;
_dbCon.Insert(v); //作ったデータをインサート
count++;
}
/// <summary>
/// テーブルに書き込んであるデータをリード
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SQLReadBtn_Clicked(object sender, EventArgs e)
{
if (_dbCon != null)
{
return;
}
var d = _dbCon.Table<VersionTbl>().MaxBy(n=>n.index); //indexの最大値のテーブルをゲット
//フォーム上のラベルに表示
result_date.Text = d.datetime;
result_version.Text = d.Version;
result_index.Text = d.index.ToString();
}
コメント
コメントを投稿