sqlite3中的表创建无效

时间:2013-12-25 21:20:24

标签: c database sqlite

我在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)。我不知道它发生在哪里也不是错误。

2 个答案:

答案 0 :(得分:3)

您只是准备 SQL语句以供执行。

实际执行它,请致电sqlite3_step

steps involved according to the the SQL Statement Object documentation是:

  1. 使用sqlite3_prepare_v2()或相关功能创建对象。
  2. 使用sqlite3_bind _ *()接口将值绑定到host parameters
  3. 通过调用sqlite3_step()一次或多次来运行SQL。
  4. 使用sqlite3_reset()重置语句,然后返回步骤2.执行此操作零次或多次。
  5. 使用sqlite3_finalize()销毁对象。
  6. (上面的列表和从official documentation取消的链接。)

答案 1 :(得分:1)

sqlite_prepare_v2()后跟sqlite3_step() s和`sqlite3_finalizer(),如Lasse V. Karlsen所建议的那样,是运行SQL的一种方法。

对于sqlite3_exec()和其他非CREATE TABLE查询,

SELECT是一种更简单的方法,您无需获取结果行。作为副作用,您不能使用变量绑定(这对于例如UPDATEDELETE查询非常有用)。