用c ++创建一个sqlite3表

时间:2015-01-25 03:48:31

标签: c++ sqlite

我正在尝试使用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',我会遇到更多错误。知道如何让这件事情发生吗?

2 个答案:

答案 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传递)。