0

データSQLを挿入しようとすると、phonegapに

var var1="a,b,c,d";

var varsplit=var1.split();

/*open for*/

db.transaction( 
function(tx,varsplit[i]) {
   tx.executeSql('INSERT INTO msj (text) VALUES ("' + varsplit[i]+ '")');
}, errorCB);

/*close for*/

結果は次のとおりです。

id         msj 
///////
 1   -     a
 2   -     d
 3   -     d 
 4   -     d

どうすれば修正できますか?

4

2 に答える 2

1

tx.executeSql はノンブロッキング関数呼び出しです。executeSql ステートメントを呼び出すと、for ループは制御が戻るのを待ちません。したがって、最後の 3 回の挿入で「d」を取得するため、ループ ポインターの値がインクリメントされます。executeSql ステートメントが 2 回目に実行されると、ループはすでに終了しており、i の値は最後の要素に設定されます。

次の挿入は、executeSql のコールバック関数で実行する必要があります。考えられる手法の 1 つは、再帰を使用することです。

于 2013-02-06T15:13:45.207 に答える
0

ありがとうシャンク!!

解決済み

var var1="a,b,c,d";

var vars=var1.split();

/*open for*/

insert(vars[i]);

/*close for*/

function insert(vars){

//openconection

  var db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000);      

  db.transaction(
  function(tx) {        
    tx.executeSql('INSERT INTO MENSAJE ( msj) VALUES ("' + vars+ '"');
  }, errorCB);

}
于 2013-02-06T17:48:16.447 に答える