2012-04-15 8 views

答えて

4

WebSQLを指しているとしますか?

現在のところ、WebSQLは基本的にラッパーのSQLiteです。 SQLite does not support複数の行を1つのINSERTステートメントに挿入します。パフォーマンスを向上させ、整合性を保証するには、make one query with placeholders and execute it multiple times in a single transactionを使用できます。

あなたの質問に答えることができない場合は、正確な問題を明確にする必要があります。

+1

はい、あなたは正しいです。 – UVM

0

私は2、3年遅れますが、私はいくつかの(追加の)提案とコードでDCoderの答えを補足したいと思います!

まず、これを読んでいるなら、おそらくWebSQLを使用すべきではないでしょう。これは、deprecatedであり、この時点では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は本当にあなたによって維持されています:)。

関連する問題