Sqlite INSERT语句不工作

时间:2015-11-05 03:15:42

标签: sqlite csv

我尝试使用以下代码在SqlLite数据库中插入数据。我检查了什么:

  • 创建了db(我可以在浏览器中看到它);
  • 表codeData也存在(我之前已创建它,列代码为char(10),desc char(50)和price char(10));
  • 可以读取CSV文件;
  • 我使用Stringbuilder函数来模拟Java(工作正常!);
  • 我发出了"警告"检查INSERT命令的语法(' INSERT INTO codeData(代码,desc,价格)值(" 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 个答案:

答案 0 :(得分:0)

我认为问题在于:

  

我发出了&#34;警告&#34;检查INSERT命令的语法(

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

这不是SQL语句,而是包含 SQL语句的字符串。为什么?因为你的整个&#34;声明&#34;用单引号括起来。所以你实际做的是将一些随机字符串发送到DBMS。它应该用它做什么?

该字符串中的insert语句也不正确。字符串字段必须用单引号括起来,而不是双引号,因此该语句应为:

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] + "'");