用c ++创建一个sqlite3表

ES-*_*AKF 5 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;
}
Run Code Online (Sandbox Code Playgroud)

我的终端返回以下内容:

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(
                ^
Run Code Online (Sandbox Code Playgroud)

如果我将'int sql'更改为'char sql',我会遇到更多错误.知道如何让这件事情发生吗?

Dre*_*ann 9

您有一个语法错误.摆脱尾随\

/* 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);";
Run Code Online (Sandbox Code Playgroud)

还有一个python-y错误.更改int sql;到:

const char sql[];
Run Code Online (Sandbox Code Playgroud)

类型const char sql[](通常读作"指向const char的指针")适用于指向字符串文字.

编辑:

为了完整起见,Hot Licks还暗示您的电话sqlite3_exec必须是:

rc = sqlite3_exec(db, sql, NULL, NULL, NULL);
Run Code Online (Sandbox Code Playgroud)