2015-11-05 118 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