在我的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中的线索和线索提供。但对于那些有兴趣重现问题的人,这里是实际的代码行这导致程序崩溃"。
在.mode column
例程的回调函数中,我有这段代码(for-loop)用于打印' ----------'列名称下方的字符可以模仿" .headers on
" &安培; " 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;风格。
答案 0 :(得分:0)
sqlite3_exec()
应该是执行pragma命令的方法。你没有给MCVE(羞辱你!),但我怀疑你要么忽略处理错误值,要么你的代码出了别的问题。你应该尝试调试它。