我在sqlite3中创建一个表时遇到问题。基本上,我在创建中使用的代码(语言c)如下:
do{
sprintf(buffer, "CREATE TABLE new_tab AS SELECT * FROM fileslog WHERE file_owner='%s' AND state='%s';", file_owner, state);
rc = sqlite3_prepare(db, buffer, -1, &result, NULL);
}while((rc == SQLITE_BUSY) || (rc == SQLITE_LOCKED));
我的问题是,当我执行此代码时,没有创建任何表。我打印了rc变量以查看可能的错误,但其值为0(SQLITE_OK)。我不知道它发生在哪里也不是错误。
答案 0 :(得分:3)
您只是准备 SQL语句以供执行。
要实际执行它,请致电sqlite3_step。
steps involved according to the the SQL Statement Object documentation是:
(上面的列表和从official documentation取消的链接。)
答案 1 :(得分:1)
sqlite_prepare_v2()
后跟sqlite3_step()
s和`sqlite3_finalizer(),如Lasse V. Karlsen所建议的那样,是运行SQL的一种方法。
sqlite3_exec()
和其他非CREATE TABLE
查询, SELECT
是一种更简单的方法,您无需获取结果行。作为副作用,您不能使用变量绑定(这对于例如UPDATE
和DELETE
查询非常有用)。