我正在尝试使用C ++,最近刚从python开始;目前正在编写一个在sqlite3数据库中构建表的函数。
我似乎遇到了一些新手错误:
int db_build()
{
sqlite3 *db;
int rc; // This line
int sql; // This line
rc = sqlite3_open("test.db", &db);
/* Create SQL statement */
sql = "CREATE TABLE WORDS(" \
"ID INT PRIMARY KEY NOT NULL," \
"CURRENT_WORD TEXT NOT NULL," \
"BEFORE_WORD TEXT NOT NULL," \
"AFTER_WORD TEXT NOT NULL," \
"OCCURANCES INT NOT NULL);";
/* Execute SQL statement */
rc = sqlite3_exec(db, sql);
sqlite3_close(db);
return 0;
}
我的终端返回以下内容:
akf@akf-v5 ~/c/HelloWorld $ g++ main.cpp -l sqlite3
main.cpp: In function ‘int db_build()’:
main.cpp:30:8: error: invalid conversion from ‘const char*’ to ‘int’ [-fpermissive]
sql = "CREATE TABLE WORDS(" \
^
main.cpp:38:29: error: invalid conversion from ‘int’ to ‘const char*’ [-fpermissive]
rc = sqlite3_exec(db, sql);
^
main.cpp:38:29: error: too few arguments to function ‘int sqlite3_exec(sqlite3*, const char*, int (*)(void*, int, char**, char**), void*, char**)’
In file included from main.cpp:4:0:
/usr/include/sqlite3.h:379:16: note: declared here
SQLITE_API int sqlite3_exec(
^
如果我将'int sql'更改为'char sql',我会遇到更多错误。知道如何让这件事情发生吗?
答案 0 :(得分:8)
您有一个语法错误。摆脱尾随的\
/* Create SQL statement */
sql = "CREATE TABLE WORDS("
"ID INT PRIMARY KEY NOT NULL,"
"CURRENT_WORD TEXT NOT NULL,"
"BEFORE_WORD TEXT NOT NULL,"
"AFTER_WORD TEXT NOT NULL,"
"OCCURANCES INT NOT NULL);";
还有一个python-y错误。将int sql;
更改为:
const char* sql;
类型const char*
(通常读作"指向const char&#34的指针;)适用于指向字符串文字。
编辑:
为了完整起见,Hot Licks还暗示您对sqlite3_exec
的通话必须是:
rc = sqlite3_exec(db, sql, NULL, NULL, NULL);
答案 1 :(得分:2)
如果您要使用C ++编写代码,您最好快速了解指针是什么,以及" C字符串"是。
sqlite3_exec
期望一个C字符串作为第二个参数,它是一个由一个零字节终止的8位char
值序列。它通过指向char的指针传递 - char *
。
所以你的声明必须是char * sql;
。
此外,如果您查看the documentation,您会看到sqlite3_exec
还有几个参数 - 它们不能省略(尽管它们可以作为NULL
传递)。