Sqlite INSERT语句不工作

Sqlite INSERT语句不工作,sqlite,csv,Sqlite,Csv,我正在尝试以下代码在SqlLite数据库中插入数据。我检查的内容: 数据库已创建(我可以在浏览器中看到) 表codeData也存在(我在前面已经创建了它,包含code char(10)、desc char(50)和price char(10)列) CSV文件读取正常 我使用了一个Stringbuilder函数来模拟Java函数(工作正常!) 我发出并发出“警报”以检查INSERT命令的语法(“INSERT INTO codeData(代码、描述、价格)值(“123456”、“CARDARD 1

我正在尝试以下代码在SqlLite数据库中插入数据。我检查的内容:

  • 数据库已创建(我可以在浏览器中看到)
  • 表codeData也存在(我在前面已经创建了它,包含code char(10)、desc char(50)和price char(10)列)
  • CSV文件读取正常
  • 我使用了一个Stringbuilder函数来模拟Java函数(工作正常!)
  • 我发出并发出“警报”以检查INSERT命令的语法(“INSERT INTO codeData(代码、描述、价格)值(“123456”、“CARDARD 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);
          });    
       }
    }
tableName=“codeData”;
columns=“代码、说明、价格”;
str1=“”插入“+tableName+”(“+columns+”)值(“;
str2=“)”;
功能代码\u导入(){
var db=openDatabase(“db_代码”,“1.0”,“代码信息”,1500000);
file=ReadFile(“PRICELIST.csv”);//打开csv
var lines=file.responseText.split('\n');
对于(var line=0;line警惕(某人);//我认为问题在于:

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

这不是一个SQL语句,而是一个包含SQL语句的字符串。为什么?因为整个“语句”都用单引号括起来了。所以,您实际上要做的是向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] + "'");

我认为问题在于:

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

这不是一个SQL语句,而是一个包含SQL语句的字符串。为什么?因为整个“语句”都用单引号括起来了。所以,您实际上要做的是向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] + "'");

从我看到的情况来看,您开始事务但忘记了提交?
tx.Commit();
?@jpaljasma
事务
函数自动提交。为什么每个INSERT语句都使用一个事务?@CL很好知道。但是代码应该正在执行。任何错误,例如
tx.executeSql(sb,function(result){console.log(结果);});
@CL,我可以在整个循环中使用事务,谢谢!我认为这将提高性能。从我所看到的情况来看,您开始事务但忘记了提交?
tx.Commit();
?@jpaljasma
事务
函数自动提交。为什么每个INSERT语句使用一个事务?@CL很高兴知道。但是代码应该正在执行。任何错误,例如
tx.executeSql(sb,函数(结果){console.log(结果);});
@CL,我可以在整个循环中使用transaction,谢谢!我想这会提高性能。@Dittmar谢谢你的帮助,但没有起作用…我尝试了两种方法:我甚至用Ctrl+C/Ctrl+V语句代替变量…另一个问题可能是
desc
可能是一个保留字(
orderbydesc
)。您仍然会收到一条错误消息,说明问题所在。@Dittmar再次感谢。我将把列名更改为descr(以防万一…)。我更改了转义序列('vs')我会尝试的。@Dittmar谢谢你的帮助,但没有奏效……我尝试了两种方法:我甚至用Ctrl+C/Ctrl+V来代替使用变量的语句……另一个问题可能是
desc
可能是一个保留字(
order by desc
)。您仍然会收到一条错误消息,说明问题所在。@Dittmar再次感谢。我会将列名更改为descr(以防万一…)。我更改了转义序列('vs'),我会尝试。