Home > C# > Database > SQLite > SQLLite-net > ドキュメント

非同期API(SQLLite-netのドキュメントの和訳)

新規作成日 2023-01-26
最終更新日

SQLLite-netは、C#から、SQLiteを使用するためのツールキットです。ドキュメントを和訳しました。

翻訳元「Asynchronous-API」の最終更新日は、2018年3月14日です。

あなたは、呼び出しがブロックされない「非同期API」を使用することができます。あなたは、応答性を高めるために、モバイル・アプリケーションに、非同期APIを使いたいと思うかもしれません。

非同期ライブラリは、Task Parallel Library (TPL) を使用します。このように、Task オブジェクトの通常の使用、そして、async および await キーワードは、あなたのために動作します。

一旦、あなたが、エンティティを定義する場合、あなたは、CreateTableAsyncを呼び出すことによって、テーブルを自動的に生成することができます:

var conn = new SQLiteAsyncConnection("foofoo");
conn.CreateTableAsync<Stock>().ContinueWith((results) =>
{
    Debug.WriteLine("Table created!");
});

あなたは、Insertを使用して、データベースに行を挿入できます。テーブルに、自動インクリメントされた主キーが含まれている場合、そのキーの値は、挿入後に利用できるようになります:

Stock stock = new Stock()
{
    Symbol = "AAPL"
};

var conn = new SQLiteAsyncConnection("foofoo");
conn.InsertAsync(stock).ContinueWith((t) =>
{
    Debug.WriteLine("New customer ID: {0}", stock.Id);
});

類似したメソッドが、UpdateAsyncとDeleteAsyncのために存在します。

データのクエリは、Tableメソッドを使用して、最も簡単に実行できます。これは、AsyncTableQueryインスタンスが返され、あなたは、WHERE句による制約やORDER BYの追加のための述語を追加できます。特別な取得メソッド ― ToListAsync、FirstAsync、FirstOrDefaultAsync ― の1つが呼び出されるまで、データベースは、物理的に変更されません。

var conn = new SQLiteAsyncConnection("foofoo");
var query = conn.Table<Stock>().Where(v => v.Symbol.StartsWith("A"));

query.ToListAsync().ContinueWith((t) =>
{
    foreach (var stock in t.Result)
        Debug.WriteLine("Stock: " + stock.Symbol);
});

利用できる低レベルのメソッドが、いくつかあります。あなたは、QueryAsyncメソッドによって、直接、データベースを問い合わせることもできます。InsertAsyncなどによって提供される変更操作に加えて、あなたは、ExecuteAsyncメソッドを発行して、データベース内で、直接、データ・セットを変更できます。

役に立つもう一つメソッドは、ExecuteScalarAsyncです。これは、あなたが、簡単に、データベースからスカラー値を返すことができます:

var conn = new SQLiteAsyncConnection("foofoo");
conn.ExecuteScalarAsync<int>("select count(*) from Stock", null).ContinueWith((t) =>
{
    Debug.WriteLine(string.Format("Found '{0}' stock items.", t.Result));
});
このエントリーをはてなブックマークに追加

Home PC C# Illustration

Copyright (C) 2011 Horio Kazuhiko(kukekko) All Rights Reserved.
kukekko@gmail.com
ご連絡の際は、お問い合わせページのURLの明記をお願いします。
「掲載内容は私自身の見解であり、所属する組織を代表するものではありません。」