8

おそらく何か不足していますが、データの負荷が事前に入力されたクライアント側のデータベースが必要です。

クライアント側のデータベースがタスクを実行できるかどうかをテストするために、メソッドを使用してダミー データを含むいくつかのダミー テーブルを作成しましたtransaction.executeSql()。しかし、私が収集できることから、すべての CREATE TABLE および INSERT INTO クエリに対して executeSQL 呼び出しが必要です。私は怠け者で、それは私には大変な仕事のようです。

私は疑問に思っています...: SQLite GUI を使用して、SQLite テーブルをかなり迅速に作成できます。私はSQLファイルをエクスポートして、それをすべて1つのexecuteSQLステートメントで実行しようとしましたが、最初の「CREATE TABLE」ビットを処理するだけで、挿入はありません。

一度に複数のクエリを実行するために認識していないトランザクション オブジェクトの特別なメソッドはありますか?

これは Mobile Safari の購入方法であり、Apple によると、SQLite データベースを使用してクライアント側のデータベースを強化しています。

4

2 に答える 2

16

コマンドライン(Linuxボックス内)で、

sqlite3 myDatabase.sqlite .dump > myDatabase.sql

これで、sqliteファイルがプレーンなsqlファイルにダンプされました。これには、createtableステートメントとinsertステートメントが含まれます。

次に、いくつかのクライアントサイドコード(おそらく調整が必要ですが、あなたはアイデアを得るでしょう)

まず、SQLダンプを取得します。(jQueryを使用した例)

$.get('./dumps/myDatabase.sql', function(response) {
  // console.log("got db dump!", response);
  var db = openDatabase('myDatabase', '1.0', 'myDatabase', 10000000);
  processQuery(db, 2, response.split(';\n'), 'myDatabase'); 
});

processQuery関数は、すべてのステートメントを1つずつ処理し、エラーを黙って無視します。

function processQuery(db, i, queries, dbname) {
    if(i < queries.length -1) {
      console.log(i +' of '+queries.length);
      if(!queries[i+1].match(/(INSERT|CREATE|DROP|PRAGMA|BEGIN|COMMIT)/)) {
        queries[i+1] = queries[i]+ ';\n' + queries[i+1];
         return processQuery(db, i+1, queries, dbname);
      }
      console.log('------------>', queries[i]);
      db.transaction( function (query){ 
        query.executeSql(queries[i]+';', [], function(tx, result) {
          processQuery(db, i +1, queries,dbname);  
        });          
      }, function(err) { 
      console.log("Query error in ", queries[i], err.message);                          
      processQuery(db, i +1, queries, dbname);   
      });
  } else {
      console.log("Done importing!");
  }
}
于 2012-08-05T11:23:36.597 に答える
2

すべてのSQLコードを1行に1コマンドでファイルに入れ、ajaxを使用してファイルをプルし、SQLを実行する各行をループします

ヒント: if not exists を使用すると、データベースを初期化するたびに呼び出すことができます

于 2010-09-27T19:24:54.480 に答える