我在c ++上有一个简单的sqlite INSERT操作: 我的函数从文本文件中读取行并生成SQL命令字符串。
[...]
sqlQry = "INSERT into content (\"title\") VALUES (\"" + line + "\")";
cout << sqlQry.c_str() << endl;
rc = sqlite3_exec(db, sqlQry.c_str(), callback, 0, &zErrMsg);
cout << "RC: " << rc << endl;
if( rc!=SQLITE_OK ){
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
我在文本文件中填充了虚拟内容,这是一个“测试”字,每行有一个额外的字符。 我的程序返回sqlite错误代码21,如果大于7个字符。 如果字符串大于9个字符,我的程序会崩溃。
命令行输出:
INSERT into content ("title") VALUES ("test")
RC: 0
testt
INSERT into content ("title") VALUES ("testt")
RC: 0
testte
INSERT into content ("title") VALUES ("testte")
RC: 0
testtes
INSERT into content ("title") VALUES ("testtes")
RC: 0
testtest
INSERT into content ("title") VALUES ("testtest") // sqlite3_exec returns 21
RC: 21
SQL error: (null)
testtestt
INSERT into content ("title") VALUES ("testtestt") // sqlite3_exec returns 21
RC: 21
SQL error: (null)
testtesttt
INSERT into content ("title") VALUES ("testtesttt") // program crashes on sqlite3SafetyCheckOk
// The debugger is pointing on line 22814 - (magic = db->magic)
结果代码21定义如下:
#define SQLITE_MISUSE 21 /* Library used incorrectly */
我是sqlite3的初学者,并且一直试图解决这个错误几个小时。 谢谢你的帮助!