スキップしてメイン コンテンツに移動

.NET MAUIでSqlite3はXamarin.Formsとほぼ同じ

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


 

 

コメント

このブログの人気の投稿

RAM DISKを使ってみた(使ったのはImDisk)

GWだし、まあちょっとラムディスクを入れてみました うちのPCはWindows11 使ったのはImDiskというRAM Disk。 まあ、この辺のインストールとかはあちこちで解説してる人がいるので適当にぐぐってくださいな で、とりあえずベンチマーク なかなかいいスピードだ で、大抵の人はブラウザのキャッシュをRAMディスクにするといいよ・・・と言うけど そもそもメインドライブがNVMeのSSDを使っている状態で、体感速度なんか上がらない(使い終わったキャッシュを再起動したら綺麗さっぱり捨て去ってくれるという利点はある)  うちで一番効果があるのは Adobe Audition というアプリ これが結構高速化する(キャッシュをちゃんとRAMディスクにしたら・・・だけど) ハイレゾ音源だと、1時間の音源が何かする度に4GBのファイルを作られてしまう なので、RAM DISKにすると、結構編集時間を短縮できる Premiere Rushも出力先をRam Diskにしておいて終わったら、SSDにコピーすると言う事をやるとかなりスピードアップになる 実はうちのPCは普段は99%のパワーで動作していて、CPUのターボブーストが掛からないようになっている 大体3.6GHz当たりで安定してるのだけど、これを100%にするとターボブースト機能がONになって一部のコアが4.5とか4.8GHzまで上がる まあ、毎回電源オプションをいじる事になるのだけどさ・・・ そうしてベンチを取ると こんな感じ とは言え、ブーストしてるからと行ってRam Diskのスピードの差を体感する事はさすがに無理 ・・・と言うかフォトショでもRAM DISKにしてよかった・・・と言うほど変わらない SSDの性能が上がってきたしもし次にPCを買い換えたらRAM DISKよりSSDの方が速いかもね  

.NET MAUI BLE(Bluetooth Low Energy)も上手く行った

2023/10/11更新 ↓こちらの記事で更新しれました。 .NET MAUI PLUGIN BLEがWindows(10/11)に対応してた Windows対応 イヤッッホォォォオオォオウ Bluetooth LE plugin for Xamarin &amp; MAUI がWindowsに対応してた~ nugetでver3.00をみんな早速ゲットだ。   ちなみにこちらはAndroid版のサンプルアプリ   GitHub...   [ブログカード風リンクタグ作成] ------------------------------------------------------------------------------ 昔、スマホとESP32の接続確認用に作ったプログラムをXamarinからMAUIに移植したら動いちゃった   まあ、ESP32からスマホへの一方通行なアプリなんだけど 面倒くさいので github に公開した 下手くそなコード書きやがってとか思われそう 「間違ってるぞこのやろう」というのを見つけたら教えてくれると嬉しいです 要素技術の調査はこれで完了かな

.NET MAUIでスプラッシュスクリーン Android12で地獄を見る

まずは起動するところから・・・・  スプラッシュスクリーンだぬ マイクロソフトのサイト 見てると簡単そう(実際簡単で細かい事を気にしなければsvgファイルを用意して1行だけ書き換えておしまい)   なんかプロジェクトファイルに自動で記述されるらしい よし、プロジェクト作った                     つーか、もうスプラッシュがあるんだけど・・・・ そして自作のsvgファイル くうっ・・・デザインセンスない・・・・   それはともかく、このSVGファイルを Resources\Images にドラッグ&ドラッグ プロジェクトを右クリックして「プロジェクトファイルの編集」 して、編集できるようになったプロジェクトファイルを 自分のプロジェクトファイルに書き換える <MauiSplashScreen Include="Resources\Splash\splash.svg" Color="#512BD4" BaseSize="168,168" /> ↓ <MauiSplashScreen Include="Resources\Splash\ splashtestmaui .svg" Color="#512BD4" BaseSize="168,168" />   とりあえずAndroidで実行 お、おう・・・・ まあ最初はこんなもんよね 最初に紹介したマイクロソフトのサイトでもBaseSizeを書き換えてくださいって言ってるし 言われたとおりに <MauiSplashScreen Include="Resources\Splash\splashtestmaui.svg" Color="#512BD4" BaseSize=" 320,600 " /> 書き換えてみると いい感じじゃーん じゃあアンドロイドのバージョン毎に試してみよう   Android 7 Android 11 Android 12 Android 13