SQLitePCLラッパーを使用したSQLiteデータベースの操作







SQLiteは、オープンソースのクロスプラットフォーム(Windows、iOS、Android、Python、Monoなど)データベースエンジンです。 複数のテーブル、インデックス、トリガー、ビューをサポートしています。

ACIDトランザクションがサポートされています(原子性/原子性、一貫性/一貫性、分離/分離、耐久性/信頼性)。

SQLitePCLは、 https://sqlitepcl.codeplex.com/で入手できるオープンソースのポータブルクラスライブラリですこれにより、.Netアプリケーション、WP、Windowsストア、UAP、および同様の方法でSQLiteデータベースを操作できます。 Android / iOS(Xamarinを使用)。 言い換えれば、これは開発を簡素化し時間を節約するCライブラリラッパー/ラッパーです。 ラッパーはかなり新しいです。 以前は、.NetおよびWindowsストアアプリケーションにsqlite-netラッパーを使用できました。



SQLite-netの使用方法に関する記事:

WinRTでデータを操作します。 パート2. SQLiteを例として使用してデータベースを操作する

CでのSQLiteの使用#



ハブには、あまり知られていないラッパーについて説明した記事があります。

SQLite Windows 10の準備をする(ユニバーサルアプリプラットフォーム)



そして以前、SQLite-net PCLと呼ばれるラッパーに関する記事がありました:

SQLiteは現在、どのプラットフォームでもC#のモバイルアプリケーション用です。

特にプロジェクトURLが同じであるため、これはSQLitePCLのように見えますが、実際には完全に異なる構文を持つラッパーであることが判明しました。



SQLitePCLの現在のバージョンを引き続き検討します。

まず、SQLiteをUAPプロジェクトに追加する必要があります。 これは次の方法で実行できます。











インストール後、変更を有効にするには、Visual Studioを再起動する必要があります。



または、次のリンクから.vsix拡張子をダウンロードできます。

ユニバーサルアプリプラットフォーム用のSQLite

またはSQLiteサイトから、Universal App Platformの.vsixファイルを見つける

SQLiteダウンロードページ

次にインストールします。



プロジェクトで、SQLiteへのリンクを設定する必要があります。











ティム・ホイヤーは、SQLiteとWindows 8アプリケーションに関する記事で、Microsoft Visual C ++ランタイムパッケージへのリンクを追加することを推奨しています。 Windowsストアで。



SQLiteライブラリ自体とそのリンクを追加しました。次に、SQLitePCLラッパーを追加する必要があります。 これを行うには、[ツール]-[NuGetパッケージマネージャー]-[ソリューション用のNuGetパッケージの管理]を選択します。検索からSQLitePCLを検索してインストールします。







または、次のコマンドを使用して、パッケージマネージャーコンソール(ツール-NuGetパッケージマネージャー-パッケージマネージャーコンソール)を使用してPCLをインストールできます。

インストールパッケージSQLitePCL



これですべての準備が整いました。 展開中にプロジェクトが突然、展開がスキップされるというメッセージを表示する場合:







そのため、構成マネージャーで次のことが必要です。







構成は、展開(および必要に応じてアセンブリ)を目的としていました。







SQLiteについての入門情報が少しあります。これは、このデータベースを初めて知ったときに役立ちます。



SQLiteテーブルの各行(WITHOUT ROWIDテーブルを除く)には、ROWIDと呼ばれる64ビットの符号付き整数キーがあります。 この列の値を取得するには、「rowid」、「oid」または「_rowid_」の独立したエイリアスのレジスタのいずれかを使用します。

SQLiteデータ型の公式サイトの情報によると、SQLiteバージョン3では、データは次のクラスのいずれかに保存されます。

NULL値はNULLです

INTEGER符号付き整数の値は、数値の値に応じて、1、2、3、4、6または8バイトに格納できます。

REAL浮動小数点数の値は、8バイトのIEEE浮動小数点数に格納されます。

TEXT値は、データベースエンコーディング(UTF-8、UTF-16BE、またはUTF-16LE)を使用して保存されるテキスト文字列です。

BLOB値は、入力されたとおりに入力されるblobデータです。



データクラスには、データ型よりも広い意味があります。 INTEGERクラスにさまざまな長さの6つのデータ型が含まれているとします。



SQLiteデータベースにはBOOLEAN型はありません。 このタイプの代わりに、INTEGERタイプが値1および0とともに使用されます。



日時は、TEXT、REAL、またはINTEGERタイプで保存できます。

1.文字列ISO8601としてのテキスト形式( "YYYY-MM-DD HH:MM:SS.SSS")。

2.ユリウス暦の日数としてのREAL浮動小数点数の形式で、予後グレゴリオ暦に従って紀元前4714年11月24日正午GMTからカウントを開始します。

3. Unix時間としての整数INTEGERは、UTC 1970-01-01 00:00:00から経過した秒数です。



他のデータベースとの最大の互換性を実現するために、SQLiteはいわゆるタイプアフィニティの概念-タイプアフィニティをサポートしています。 他のデータベースとSQLiteのデータ型に一致するルールの順序があります。 最初のルールは、文字列「INT」が外部データベースのデータ型文字列にある場合、この型はSQLite INTEGER型にマップされるということです。 この規則が満たされない場合、2番目の規則は、データ型の文字列にテキスト「CHAR」、「CLOB」、または「TEXT」が含まれているかどうかがチェックされます。 含まれている場合、データ型はSQLite TEXT型にマップされます。 など...



そして、このような比較的大規模な紹介の後、その情報の大部分がRuNetですでに遭遇しているので、ついにSQLitePCLの使用例のコードに戻ります



動作するには、名前空間へのリンクを追加する必要があります。



using SQLitePCL;
      
      





次のようにデータベースにテーブルを作成できます。



  using (var conn = new SQLiteConnection("Storage.db")) { string sql = @"CREATE TABLE IF NOT EXISTS People ( ID INTEGER NOT NULL PRIMARY KEY, FirstName NVARCHAR(50), LastName NVARCHUAR(50));"; using (var statement = conn.Prepare(sql)) { statement.Step(); } }
      
      





主キー列は、 PRIMARY KEY式を使用して指定され、テーブルには1つしか存在できません。

UNIQUEは、列に一意の値のみを必要とする制約です。 テーブルには、このような列がいくつかある場合があります。

NOT NULLは、列にNULL値が存在することを禁止する制約です。

CHECK-チェックする条件を設定します。 例:



 CREATE TABLE IF NOT EXISTS People ( ID INTEGER NOT NULL PRIMARY KEY, FirstName TEXT CHECK (FirstName NOT IN ('','')), LastName TEXT NOT NULL UNIQUE)
      
      





テーブルに外部キーがある場合、そのインデックスを作成する必要があります。 大きなテーブルの検索速度を最適化するためにインデックスを作成することも望ましいです。 主キー列の場合、インデックスが自動的に作成されます。 次のようなインデックスを作成できます。



 using (var statement = conn.Prepare(@"CREATE INDEX IF NOT EXISTS lastname_indx ON People (LastName)")) { statement.Step(); }
      
      





テーブルを作成するためのSQL構文の詳細については、 SQLite Query Language:CREATE TABLEを参照してください。



SQLitePCLのマイナスのうち、外部キーの作成をサポートしていないことに注意することができます( SQLite外部キーサポート )。

オンザフライでテーブルを作成してテーブル間にリレーションシップを追加する必要がある場合は、他のラッパーを使用できます。 ところで、SQLiteの外部キーはデフォルトで無効になっています。



簡単なクエリを使用して、テーブルにエントリを追加できます。



 using (var statement = conn.Prepare("INSERT INTO People (FirstName, LastName) VALUES ('', '')")) { statement.Step(); }
      
      





そして、次のパラメーターを使用できます。



 using (var statement = conn.Prepare("INSERT INTO People (FirstName, LastName) VALUES (?, ?)")) { statement.Bind(1, ""); statement.Bind(2, ""); statement.Step(); }
      
      





まったく同じ構造を使用して次のユーザーをテーブルに追加するか、次の構造を使用してStep内で次のアクションを実行できます。



 //  statement    statement.Reset(); statement.ClearBindings(); //      statement.Bind(1, ""); statement.Bind(2, ""); //   statement.Step();
      
      





パラメータ番号を指定する代わりにエイリアスを使用することもできます。



 using (var statement = conn.Prepare("INSERT INTO People (FirstName, LastName) VALUES (@fName, @lName)")) { statement.Bind("@fName", ""); statement.Bind("@lName", ""); statement.Step(); }
      
      





削除は、レコードの追加または更新と同じです。



  string fname =""; using (var statement = conn.Prepare("DELETE FROM People WHERE FirstName=?")) { statement.Bind(1, fname); statement.Step(); }
      
      





レコードを読み取るプロセスはわずかに異なります。



 using (var statement = conn.Prepare("SELECT LastName, FirstName FROM People WHERE FirstName=''")) { while (statement.Step() == SQLiteResult.ROW) { txtInfo.Text = txtInfo.Text + (string)statement[0] + Environment.NewLine; } }
      
      





「COMMIT TRANSACTION」または「ROLLBACK TRANSACTION」を使用して、トランザクションを手動で開始できます。 これを行うには、クエリのリストの前に、次を実行します。



  using (var statement = conn.Prepare("BEGIN TRANSACTION")) { statement.Step(); }
      
      





リクエスト後、次のことを確認します。



  using (var statement = conn.Prepare("COMMIT TRANSACTION")) { statement.Step(); }
      
      







デスクトップアプリケーションデータベース自体は次の場所にあります。

%USERPROFILE%\ AppData \ Local \ Packages \ {PackageId}



モバイルデバイスでデータベースを表示するには、ユーティリティが必要です。

たとえば、WP8.1のPower Toolsを使用できます

このユーティリティを使用して、Windows 10電話でSQLiteデータベースにアクセスできました。







公式Webサイトで、SQLiteを操作するためのツールを見つけることができます

ロシア語をサポートし、Windows(.zipアーカイブ)にインストールする必要のないポーランド語プログラムSQLite Studioが気に入った

それに加えて、無料のSQLite2009 Pro Enterprise Managerを強調表示できます。

SQLite Expertの個人版は、個人および商用での使用無料です。



私を助けた資料:

MVAのコース「Windows 10の開発者ガイド」

記事「SQLiteの新しいポータブルクラスライブラリ」



All Articles