2015-11-05 157 views
1

我正在嘗試下面的代碼來插入數據在SqlLite數據庫。我檢查的是:Sqlite INSERT語句不工作

  • db已創建(我可以在瀏覽器中看到它); (我已經在前面創建了它,列代碼爲char(10),desc char(50)和price char(10));
  • CSV文件讀取正常;
  • 我用了一個Stringbuilder函數來模擬Java中的一個(工作正常!);
  • 我發出了「alert」來檢查INSERT命令的語法('INSERT INTO codeData(code,desc,price)values(「123456」,「Cardboard 123」,「US $ 9,99」)') ;
  • 該代碼運行時沒有錯誤消息。

但是表中沒有數據輸入!

任何人都可以幫到我嗎?我認爲這個錯誤很明顯,但經過24小時的努力,我再也看不到了......謝謝!

tableName ="codeData"; 
    columns = "code, desc, price"; 
    str1 = " 'INSERT INTO " + tableName + " (" + columns + ") VALUES ("; 
    str2 = ")'"; 

    function Codes_Import() { 

    var db = openDatabase("db_codes", "1.0", "Code Information" , 1500000); 
    file = ReadFile("PRICELIST.csv"); // open csv 
    var lines = file.responseText.split('\n'); 
    for(var line = 0; line < lines.length; line++) 
    { 
     var line = (lines[line]); 
     var sb = new StringBuilder(str1); 
     var str = line.split(";"); 
     sb.append('"' + str[0] + '","'); 
     sb.append(str[1] + '", "'); 
     sb.append(str[2] + '"'); 
     sb.append(str2); 
     alert (sb); //<-- just to check if the INSERT statement is correct. 
      db.transaction(function(tx) { 
      tx.executeSql(sb); 
      });  
     } 
    } 
+1

從我能看到你開始交易但忘了提交? 'tx.commit();'? – jpaljasma

+0

@jpaljasma交易功能自動提交。 –

+0

爲什麼每個INSERT語句都使用一個事務? –

回答

0

我認爲問題就出在這裏:

I issued and "alert" to check the syntax of the INSERT command (

'INSERT INTO codeData (code, desc, price) values("123456","Cardboard 123", "US$ 9,99")' 

這不是一個SQL語句,但含有的SQL語句字符串。爲什麼?因爲你的整個「陳述」被包裹在單引號中。所以你實際上做的是發送一些隨機字符串到DBMS。它應該怎麼做呢?

該字符串中的insert-statement也不正確。字符串字段必須用單引號,而不是雙引號,所以該語句應該是:

INSERT INTO codeData (code, desc, price) values('123456','Cardboard 123', 'US$ 9,99') 

此外,我懷疑你的代碼編譯。在C#中,對於以單引號開頭的字符串,會出現編譯器錯誤,因爲單個代碼只能包裝一個字符。 以下行應該提出一個編譯器錯誤:

sb.append(str[1] + '", "'); 

就意識到,這是JavaScript的...

因此,所有的第一次,解決您的SQL語句wapper:

str1 = "INSERT INTO " + tableName + " (" + columns + ") VALUES ("; 
str2 = ")"; 

然後修復參數串聯:

sb.append("'" + str[0] + "','"); 
sb.append(str[1] + "', '"); 
sb.append(str[2] + "'"); 
+0

@Dittmar感謝您的幫助,但沒有奏效......我嘗試了兩種方法:我甚至按Ctrl + C/Ctrl + V語句代替使用變量... – MWata

+0

另一個問題可能是'desc'可能是一個保留字('按順序排列)。您仍應該收到錯誤消息,說明問題所在。 –

+0

@Dittmar再次感謝。我會將列名更改爲descr(以防萬一...)。我改變了轉義序列('vs'),我會嘗試。 – MWata