我正在关注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
构建程序。
答案 0 :(得分:0)
message printed by libdbi sqlite3 driver find_result_field_types()
尝试从查询字符串中推断出字段类型。
由于它是开源的,您可以分叉代码并删除您不想要的消息。还有一个bug tracker。