C++ SQLite查询中的语法错误
我试图将大量记录插入SQLite数据库。如果我尝试使用sqlite3_exec C-API,就会出现上述错误 代码如下所示:C++ SQLite查询中的语法错误,c++,c,sqlite,C++,C,Sqlite,我试图将大量记录插入SQLite数据库。如果我尝试使用sqlite3_exec C-API,就会出现上述错误 代码如下所示: ret = sqlite_exec(db_p,".import file.txt table", NULL, NULL, NULL); 我知道.import是命令行,但是有没有任何方法可以让您以最短的时间插入非常大的记录。我已经通读了以前的批量插入代码,并尝试进行更改,但这些都没有提供所需的结果 有没有一种方法可以在不调用中间API的情况下直接将字符串插入表中?语法错误
ret = sqlite_exec(db_p,".import file.txt table", NULL, NULL, NULL);
我知道.import是命令行,但是有没有任何方法可以让您以最短的时间插入非常大的记录。我已经通读了以前的批量插入代码,并尝试进行更改,但这些都没有提供所需的结果
有没有一种方法可以在不调用中间API的情况下直接将字符串插入表中?语法错误的答案很可能是,SQL语句中的字符串没有括在引号中。。导入很可能无法通过API进行。然而,加快插入速度有一件至关重要的事情:将它们包装在事务中
BEGIN;
lots of insert statements here;
COMMIT;
如果没有这一点,sqlite将需要在每次插入后写入文件,以保持ACID原则。事务稍后将以批量方式写入文件。能否添加一段代码,生成SQL并调用
sqlite3\u exec
?此错误通常由语法错误或格式错误引起。ret=sqlite_exec(db_p,“.import file.txt table”,NULL,NULL,NULL);必须有一种方法在C API函数中使用命令行等价物吗?我已经发布了上面报告错误的代码片段。这是正确的答案。SQLite是一个库.import
和其他dot命令是SQLite外壳的一部分,它只是一个基于SQLite构建的示例程序(尽管是官方的)。但是,您应该在BEGIN
和COMMIT
之后添加分号。我是否需要在每个事务之间使用sqlite3\u exec来进行单独的插入?谢谢:-)@SportyMe:看一看shell实用程序()的源代码。搜索包含引号的“导入”。他们使用BEGIN/END
创建事务,为每列调用sql3\u bind\u文本,为每行调用sql3\u step
使用准备好的语句。代码可读性很强。