c ++ / sqlite3:INSERT操作崩溃,值> 8个字符

时间:2014-05-25 14:54:57

标签: c++ sqlite

我在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的初学者,并且一直试图解决这个错误几个小时。 谢谢你的帮助!

0 个答案:

没有答案