什么原因导致“没有声明中的表”消息?

时间:2014-02-05 09:08:20

标签: c sqlite libdbi

我正在关注this示例程序,但我将使用SQLite3而不是MySQL。

首先,我需要检查user_version以查看表格是否已创建且是最新的。

到目前为止,这是我的代码:

#include <stdio.h>
#include <dbi/dbi.h>

#define CONF_PATH "./"
#define DB_FILE "db.sqlite3"

int main() {
    dbi_conn conn;
    dbi_result result;
    dbi_inst instance;

    long ver = 0;

    dbi_initialize_r(NULL, &instance);
    conn = dbi_conn_new_r("sqlite3", instance);

    dbi_conn_set_option(conn, "sqlite3_dbdir", CONF_PATH);
    dbi_conn_set_option(conn, "dbname", DB_FILE);
    dbi_conn_set_option(conn, "encoding", "UTF-8");

    if (dbi_conn_connect(conn) < 0) {
        printf("Could not connect. Please check the option settings\n");
    } else {
        result = dbi_conn_query(conn, "PRAGMA user_version;");

        if (result) {
            if (dbi_result_next_row(result)) {
                ver = strtol(dbi_result_get_string(result, "user_version"), NULL, 10);
            }
            dbi_result_free(result);
        }

        printf("DB Ver. %ld\n", ver);

        dbi_conn_close(conn);
    }

    dbi_shutdown_r(instance);

    return 0;
}

一切都按预期工作,但我得到一个奇怪的输出:

no tables in statement !
DB Ver. 1

第二行没问题。我在我的代码的第33行打印它。第一个怎么样?很明显,声明中没有表格,但我不打印,也不想要这条消息......

我的系统是:

Debian sid

gcc(Debian 4.8.2-14)4.8.2

libdbi1 0.9.0-1

libdbd-sqlite3 0.9.0-2

我使用gcc -ldbi -ldl -std=c11 -Wall -Werror dbtest.c -o dbtest构建程序。

1 个答案:

答案 0 :(得分:0)

message printed by libdbi sqlite3 driver find_result_field_types()尝试从查询字符串中推断出字段类型。

由于它是开源的,您可以分叉代码并删除您不想要的消息。还有一个bug tracker