我有一个INSERT语句,后跟一个SQLITE3_EXEC,后跟一个SELECT语句和另一个SQLITE3_EXEC。我在EXEC上为SELECT语句得到一个SQLERROR 21(SQLITE_MISUSE)。
我错过了两个EXEC之间的东西吗?比如COMMIT,还是?
21是否有可能尝试插入已存在的记录?
NSString *insertCommand = [NSString stringWithFormat:@"INSERT INTO CardData (CARD_ID, CARD_NAME, CODE_VAL) VALUES ('/%@', '/%@', '/%@')",
symbol.data, @"Test Card", symbol.typeName];
sqlite3_exec(db, [insertCommand UTF8String], NULL, NULL, &errmsg);
if(errmsg != NULL)
NSLog(@"insert error: /%@", &errmsg); // DEBUGGING ONLY!
// now, pull it back out of the d/b and display the data
const char *sqlStatement = @"select CARD_ID, CARD_NAME, CODE_VAL from CardData";
sqlite3_stmt *compiledStatement;
int err = sqlite3_prepare_v2(db, [sqlStatement UTF8String], -1, &compiledStatement, NULL); // Setup the SQL Statement and compile it for faster access
if(err != SQLITE_OK)
NSLog(@"prepare error: /%@", err);
else {
// Loop through the results and add them to the feeds array
while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
// Read the data from the result row
resultText.text = [NSString stringWithFormat:@"\nDatabase: \n%@ \n%@ \n%@", resultText.text,
[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)],
[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)],
[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)]];
}
sqlite3_finalize(compiledStatement); // release it...
sqlite3_close(db);
}
答案 0 :(得分:1)
根据documentation,(1.4错误代码 - > SQLITE_MISUSE),它表示如果您尝试访问已关闭的数据库或使用来自两个不同线程的相同数据库指针调用sqlite_exec,则会出现此错误。在这种情况下,请检查这两种可能性。
希望它有所帮助。
答案 1 :(得分:0)
我决定使用FMDB ...感谢所有人的建议,感谢您的时间。