如何运行SQLite3' PRAGMA'通过C-API命令?

时间:2017-10-12 14:02:54

标签: sql c database sqlite

在我的C程序中,我需要运行以下pragma命令:

sqlite3_exec()

但是我是否尝试通过sqlite3_prepare_v2()例程或 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 例程运行此sql,我的程序在Windows命令提示符下停止响应/工作(它是一个简单的控制台程序& #39;用c语言。)

有趣的是,当我通过运行sqlite3.exe本身在命令提示符下运行相同的pragma sql时,它运行得很好并提供以下输出:

sqlite3_exec()

但在我自己的c程序中,它并没有。我对这个问题做了一些研究。谷歌搜索和SQLite文档都指向官方文档中的this page here。但不幸的是,那里给出的信息并没有足以解决问题。我们如何成功运行SQLite3' PRAGMA'通过C-API命令?

编辑:以下是实际有问题的代码行。或MCVE

我找到了我的程序失败的原因,并修复了它(由Murphy's answer中的线索和线索提供。但对于那些有兴趣重现问题的人,这里是实际的代码行这导致程序崩溃&#34;。 在.mode column例程的回调函数中,我有这段代码(for-loop)用于打印&#39; ----------&#39;列名称下方的字符可以模仿&#34; .headers on&#34; &安培; &#34; int h; for(h=0; h <= (strlen(col_value[i])+5); h++) printf("-"); &#34; sqlite3控制台中的输出样式。

strlen()

问题是headers在打印dflt_value&#39;时造成的。对于PRAGMA sql的结果列strlen(),对于我表中的前三列,该列为空。如果我停止在dflt_value上运行sqlite3_prepare_v2()。程序运行正常。同样,在 int h; for(h=0; h <= (strlen(sqlite3_column_text(stmt, 4))+5); h++) printf("-"); 例程中,问题是由以下几行引起的:

.headers on

如果我删除或评论这些行,则所有行都运行良好 - 尽管没有&#34; CREATE TABLE IF NOT EXISTS image ( id BIGINT PRIMARY KEY, content BYTEA ) WITHOUT OIDS; &#34;风格。

1 个答案:

答案 0 :(得分:0)

sqlite3_exec()应该是执行pragma命令的方法。你没有给MCVE(羞辱你!),但我怀疑你要么忽略处理错误值,要么你的代码出了别的问题。你应该尝试调试它。