如何通过C-API运行SQLite3'PRAGMA'命令?
问题描述:
里面我的C程序,我需要运行下面的编译命令:如何通过C-API运行SQLite3'PRAGMA'命令?
const char *sql = "PRAGMA table_info(family)"; /* 'family' is the table name */
但我是否尝试通过sqlite3_exec()
例程或sqlite3_prepare_v2()
程序来运行该SQL,我的程序停止响应,/在Windows命令提示符工作(这是一个简单的c语言控制台程序)。
有趣的是,当我运行,在命令提示符下相同的编译SQL正常运行的sqlite3.exe本身,它运行得很好,给了以下的输出:
sqlite> pragma table_info(family);
cid name type notnull dflt_value pk
---------- ---------- ---------- ---------- ---------- ----------
0 id INTEGER 0 1
1 name TEXT 1 0
2 nickname TEXT 1 0
3 dob TEXT 1 CURRENT_TI 0
但是我自己的C程序里面没有。我对这个问题做了一些研究。谷歌和SQLite文档都指向this page here官方文档。但不幸的是,所提供的信息并没有使我足以解决问题。我们如何通过C-API成功运行SQLite3'PRAGMA'命令?
编辑:这里是实际有问题的代码行。 OR MCVE
我发现我的程序的失败的原因,并有固定的(线索提供者和Murphy's answer线索。但对于那些有兴趣重现问题,以下是这是造成程序代码的实际行 在我的sqlite3_exec()
例程的回调函数中,我有这段代码(for-loop)用于在列名下面打印'----------'字符以模仿“.mode column
”&“ .headers on
“sqlite3控制台中的输出风格
int h;
for(h=0; h <= (strlen(col_value[i])+5); h++)
printf("-");
在为PRAGMA sql的结果列dflt_value
打印'headers
'时,该问题是由strlen()
引起的,对于表中的前三列为空。如果我停止运行strlen()
dflt_value
。该程序运行良好。同样,在sqlite3_prepare_v2()
常规问题正在引起以下行:
int h;
for(h=0; h <= (strlen(sqlite3_column_text(stmt, 4))+5); h++)
printf("-");
如果我删除或评论这些线,全部运行良好 - 尽管没有“.headers on
”的风格。
谢谢你的线索和线索。我已经提供了MCVE,并且可能涉及到:sqlite3_exec()和sqlite3_prepare_v2(),这两个例程都可以工作。 :) – FAQi