2012-04-18 17 views
1

Phonegapを使用してSQLiteにデータを挿入しようとしています。Android:Phonegap SQLiteの問題

そのハード

tx.executeSql('DROP TABLE IF EXISTS DEMO'); 
tx.executeSql('DROP TABLE IF EXISTS DEMO'); 
tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)'); 
tx.executeSql('INSERT INTO DEMO (id, data) VALUES (1, "First row")'); 
tx.executeSql('INSERT INTO DEMO (id, data) VALUES (2, "Second row")'); 

以下のようにコード化されたときに正常に動作しますが、私は

var third = $('#data').val(); 
alert(third); 
tx.executeSql('INSERT INTO DEMO (id, data) VALUES (3,'+ third +')'); 

次のようにフォームから動的な値を挿入しようとすると、私は

以下のようlogcatで例外を取得
04-18 12:20:51.011: I/SqliteDatabaseCpp(7352): sqlite returned: error code = 1, msg = no such column: test, db=/data/data/com.eyepax.phonegap/databases/webview.db 

私は失われており、問題を把握できませんでした。誰かが私を助けてくれますか?

フルのjsファイルは、変数の前と後に「追加

function onDeviceReadyStorage() { 
     var db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000); 
     db.transaction(populateDB, errorCB, successCB); 

    } 

function populateDB(tx) { 
    tx.executeSql('DROP TABLE IF EXISTS DEMO'); 
    tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)'); 
    tx.executeSql('INSERT INTO DEMO (id, data) VALUES (1, "First row")'); 
    tx.executeSql('INSERT INTO DEMO (id, data) VALUES (2, "Second row")'); 
    var third = $('#data').val(); 
    alert(third); 
    tx.executeSql('INSERT INTO DEMO (id, data) VALUES (3,'+ third +')'); 
} 

function errorCB(err) { 
    alert("Error processing SQL: "+err.code); 
} 

function successCB() { 
    alert("success!"); 
    alert("now query..."); 
    var db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000); 
     db.transaction(queryDB, errorCB); 
} 

function queryDB(tx) { 
     tx.executeSql('SELECT * FROM DEMO', [], querySuccess, errorCB); 
     // alert("came to query"); 
    } 

function querySuccess(tx, results) { 
     //alert("Query sucess"); 
     // this will be empty since no rows were inserted. 
     console.log("Insert ID = " + results.rows.item(0).data); 
     // this will be 0 since it is a select statement 
     console.log("Rows Affected = " + results.rowsAffected); 
     // the number of rows returned by the select statement 
     console.log("Insert ID = " + results.rows.length); 
     var htmlString = "<ul>"; 
     for(var i = 0; i<results.rows.length; i++){ 
      console.log("Result from DB = " + results.rows.item(i).data); 
      htmlString = htmlString + "<LI>"+ results.rows.item(i).data +"</LI>" 
     } 
     htmlString = htmlString + "</UL>"; 

     $('#myDBData').html(htmlString); 
    } 

答えて

8

てみてください以下のようになり、このよう :。

tx.executeSql('INSERT INTO DEMO (id, data) VALUES (3,"'+ third +'")'); 

編集:

comment belowを参照してください。SQLインジェクションの脆弱性を避けるには、answerに従い、?plac直接値を追加する代わりにeholderを使用します。

+0

あなたは男です。それは魔法のように働いた:) –

+0

+1私から。ありがとう、これは大いに助けになった!! – NSException

+1

これはSQL脆弱性を引き起こす可能性があります。 ?を使用してください?代わりにhttp://stackoverflow.com/a/26058813/1283667に記載されているプレースホルダを使用してください。 (私は広く使われているcordova-sqlite-storageプラグインのメンテナーです) – brodybits

1
tx.executeSql('INSERT INTO DEMO (id, data) VALUES (3,?)',[third]); 
+1

あなたの答えにはいくつかの説明を記入してください – Huangism

+0

javaスクリプトにクエリを書いて実行時に変数の値を渡します。クエリ – sejal

+0

これは正解です。 (私は広く使われているcordova-sqlite-storageプラグインのメンテナーです。) – brodybits