SQLLite-netは、C#から、SQLiteを使用するためのツールキットです。ドキュメントを和訳しました。
翻訳元「Synchronous API」の最終更新日 2021年10月25日です。
序文
Introduction
ライブラリは、あなたのSQLite テーブルへの同期要求と非同期要求の両方をサポートしています。このガイドでは、あなたのデータベースに同期呼び出しを行う方法をデモンストレーションします。まず始めに、同期APIを使用して作成されたすべての接続は、SQLiteConnectionクラスを使用して作成する必要があります。下記の例は、このクラスを初期化する方法を示しています。
SQLiteConnection _connection;
public SQLiteConnection InitialiseConnection()
{
var DataSource = "DatabaseName.sqlite3";
SQLiteConnectionString options = new SQLiteConnectionString(DataSource, false);
_connection = new SQLiteConnection(options);
}
次に、あなたのオブジェクトが初期化され、接続が開かれました。あなたは、これで、クエリの作成を開始できます。
選択クエリ
Select Query
ライブラリは、あなたのデータベースで、選択クエリを実行する複数の方法をサポートしています。そして、あなたは、SQLやLINQを使用して、クエリを実行できます。どちらか一方を使用しても、実際の利点はありません。しかしながら、コードベース全体の一貫性が向上するため、SQLよりもLinqを使用する方が明確になります。以下は、SQLメソッドを使用したSelectクエリの例です。このセクションで使用されるクラス・テーブル・マッピングが含まれています。
[Table("records")]
public class Record
{
[PrimaryKey]
[Column("id")]
public Guid Id
{ get; set; }
[Column("name")]
public string Name
{ get; set; }
[Column("age")]
public int Age
{ get; set; }
[Column("date")]
public DateTime Date
{ get; set; }
}
public void GetRecords()
{
var options = new SQLiteConnectionString(DataSource, false);
var conn= new SQLiteConnection(options);
string query = $"SELECT * FROM records";
var results = conn.Query<Record>(query);
conn.Close();
}
Queryメソッドには、正しいテーブルをクエリするために、type()が必要です。この例では、Recordクラスは、recordsテーブルにマップされました。それで、Recordを、Query型として宣言することにより、ライブラリは、マップされたテーブルを使用できるようになります。
以下で、あなたは、LINQを使用して実行されている、まったく同じクエリを見るでしょう。
public void GetRecords()
{
var options = new SQLiteConnectionString(DataSource, false);
var conn= new SQLiteConnection(options);
var results = conn.Table<Record>().ToList();
conn.Close();
}
あなたが見るように、クエリのSQLバージョンと比較したとき、LINQは、はるかに凝縮されています。あなたは、結果を絞り込むために、WhereやOrderByのような、このSELECTクエリを、追加のLINQ条件で補足できます。
var results = conn.Table<Record>().Where(t => t.Age > 40).OrderByDescending(t => t.Age).ToList();
ステートメントを挿入
Insert Statement
ステートメントを挿入は、選択クエリよりさらに単純です。繰り返しますが、このライブラリは、SQLとLINQの両方のメソッドをサポートしてステートメントを実行します。両方の方法の例を以下に示します。
public void InsertRecord()
{
var options = new SQLiteConnectionString(DataSource, false);
var conn= new SQLiteConnection(options);
string query = $"INSERT INTO records VALUES ('{new Guid()}', 'Mark', '23', '{DateTime.Now}')";
var results = conn.Query<Record>(query);
conn.Close();
}
そして、LINQバージョン:
public void InsertRecord()
{
var options = new SQLiteConnectionString(DataSource, false);
var conn= new SQLiteConnection(options);
var record = new Record { Id = new Guid(), Name = "Mark", Age = 23, Date = DateTime.Now };
var results = conn.Insert(record);
conn.Close();
}
次に、あなたは、更新も実行できるステートメントを挿入することができます(conn.Update(record))。これらの操作を実行するには、マップされたtableクラス **MUST ** にマップされた主キーが含まれていることに注意してください。そうしないと、アクションは動作しません。
ステートメントを更新
Update Statement
これは、LINQを使用して、どのように、クエリを更新を実行するかの簡単なデモンストレーションです。conn.Update(record)関数は、レコードの主キー (この場合は、record.Id) を使用して、データベースで更新するレコードを見つけます。この結果、あなたが、主キーを更新できなくなります (とにかく、これを行うべきではありません)。
public void UpdateRecord(Guid id)
{
var options = new SQLiteConnectionString(DataSource, false);
var conn= new SQLiteConnection(options);
var record = new Record { Id = id, Name = "Mark", Age = 23, Date = DateTime.Now };
var results = conn.Update(record);
conn.Close();
}
あなたが、LINQを使用したくない場合、これらのクエリは、従来のSQLとQuery<T>メソッドを使用して作成することもできます。
ステートメントを削除
ステートメントを削除
Deleteステートメントは、getリクエストと同様に機能します。あなたは、使いたいテーブル・マッピングを選択し、続いて、クエリ・パラメータを渡します。一般的な例では、あなたは、レコードの主キーを使用して、レコードを削除します。このプロパティは、Recordクラスで設定されました;
public void DeleteRecord(string id)
{
var options = new SQLiteConnectionString(DataSource, false);
var conn= new SQLiteConnection(options);
conn.Delete<Record>(id);
conn.Close();
}
これは、関連付けられたPKを持つレコードが削除されます。