HTML 5のクライアント側データベースでバッチ操作を使用することは可能ですか?
2 に答える
WebSQLについて言及していると思いますか?
現時点では、WebSQL は基本的にラッパーの SQLite です。SQLiteは、1 つのステートメントに複数の行を挿入することをサポートしていません。INSERT
ただし、プレースホルダーを使用して 1 つのクエリを作成し、1 つのトランザクションで複数回実行して、パフォーマンスを向上させ、整合性を確保することができます。
それがあなたの質問に答えない場合は、あなたが抱えている正確な問題を明確にする必要があります.
私は数年遅れていますが、DCoderの回答にいくつかの(追加の)提案とコードを追加したいと思います!
まず、これを読んでいるのであれば、おそらく WebSQL を使用するべきではありません。これは、現時点で W3C 標準トラックの唯一のデータベースである IndexedDB を支持して廃止されました。
なんらかの理由で WebSQL を使用し続けるつもりなら、デフォルト API の非同期性が、複数ステートメントのトランザクション コードが複雑で扱いにくくなる可能性が高いことをおそらく認識しているでしょう。
このようなコードを書く手間を省きたい場合は、BakedGoodsを調べてください。たとえば、ライブラリを使用して 1 つまたは複数のアイテムをテーブルに挿入するのは、次のように簡単です。
bakedGoodsd.set({
data: [{key: "key1", value: "value1"}, {key: "key2", value: "value2"}]
storageTypes: ["webSQL"],
complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});
...これは、生の API を使用して同じことを行うために記述しなければならないものよりもはるかに簡潔です。
function insertData(transaction)
{
var dataInsertStatement = "INSERT INTO Main(key, value) VALUES (?, ?)";
var dataArray = [{key: "key1", value: "value1"}, {key: "key2", value: "value2"}];
int i = 0;
function advance()
{
if(++i < dataArray.length)
insertDataItem();
}
function insertDataItem()
{
transaction.executeSql(
dataInsertStatement,
[dataArray[i].key, dataArray[i].value],
advance
);
}
insertDataItem();
}
function conductDataInsertTransac(database)
{
database.transaction(insertData);
}
window.openDatabase("Baked_Goods", "", "Baked Goods", 1024*1024, conductDataInsertTransac);
BakedGoods のシンプルなインターフェイスと比類のないストレージ施設のサポートは、一部のストレージ施設固有の構成のサポートが不足しているという代償を払っています。たとえば、複数列の主キーを持つ WebSQL テーブルでのストレージ操作の実行はサポートされていません。
したがって、これらのタイプの機能を頻繁に使用する場合は、他の場所を探すことをお勧めします.
ああ、そして完全な透明性のために、BakedGoods は本当にあなたによって維持されています :) .