【问题标题】:Sqlite INSERT statement NOT WORKINGSqlite INSERT 语句不工作
【发布时间】:2015-11-05 03:15:41
【问题描述】:

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

  • 数据库已创建(我可以在浏览器中看到);
  • 表 codeData 也存在(我之前已经创建了它,列 code char(10)、desc char(50) 和 price char(10));
  • CSV 文件读取正常;
  • 我使用 Stringbuilder 函数来模拟 Java 函数(工作正常!);
  • 我发出并“警告”检查 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);
          });    
       }
    }

【问题讨论】:

  • 从我可以看到你开始交易但忘记提交? tx.commit();?
  • @jpaljasma transaction 函数自动提交。
  • 为什么每个 INSERT 语句使用一个事务?
  • @CL 很高兴知道。尽管如此,代码应该正在执行。任何错误,例如tx.executeSql(sb, function(result){console.log(result);});
  • @CL,我可以在整个循环中使用事务,谢谢!我认为这将提高性能。

标签: sqlite csv


【解决方案1】:

我认为问题出在这里:

我发出并“警告”以检查 INSERT 命令的语法(

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

这不是一条 SQL 语句,而是一个包含一条 SQL 语句的字符串。为什么?因为您的整个“声明”都用单引号括起来。所以你实际上做的是向 DBMS 发送一些随机字符串。它应该用来做什么?

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

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

【讨论】:

  • @Dittmar 感谢您的帮助,但没有奏效...我尝试了两种方法:我什至 Ctrl+C/Ctrl+V 语句而不是使用变量...
  • 另一个问题可能是desc 可能是保留字(order by desc)。您仍然应该收到一条错误消息,说明问题所在。
  • @Dittmar 再次感谢。我会将列名更改为descr(以防万一......)。我更改了转义序列( ' vs " ),我会尝试。
猜你喜欢
  • 2012-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多