Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ SQLite查询中的语法错误_C++_C_Sqlite - Fatal编程技术网

C++ SQLite查询中的语法错误

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的情况下直接将字符串插入表中?语法错误

我试图将大量记录插入SQLite数据库。如果我尝试使用sqlite3_exec C-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
使用准备好的语句。代码可读性很强。