2017-01-17 7 views
0

У меня есть база данных sqlite3, при вставке данных в БД, она всегда не удалось с кодом возврата SQLITE_ERRORкоманда Insert потерпела неудачу с кодом возврата SQLITE_ERROR

Например, sqlite3_prepare_v2 всегда не удалось.

NSString *sql = [NSString stringWithFormat:@"insert into t_elementnode(opname,op,param) values('%@',%ld,'%@')",elementNode.name,elementNode.operation,elementNode.paramString]; 
sqlite3_stmt *stmt; 
int result = sqlite3_prepare_v2(db, [sql UTF8String], -1, &stmt, NULL); 
if (result != SQLITE_OK) { 
NSLog(@"====exit:%@,result:%d,op:%ld,param:%@",elementNode.name,result,elementNode.operation,elementNode.paramString); 
return; 
} 

sqlite3_bind_text(stmt, 1, elementNode.name.UTF8String, -1, NULL); 
sqlite3_bind_int64(stmt, 2, elementNode.operation); 
sqlite3_bind_text(stmt, 3, elementNode.paramString.UTF8String, -1, NULL); 

result = sqlite3_step(stmt); 
if (result != SQLITE_DONE) { 
    sqlite3_finalize(stmt); 
    NSLog(@"===insert error:%d",result); 
    return; 
} 

sqlite3_finalize(stmt); 

Вывод NSLog были:

==== выход: название, результат: 1, оп: 11, парам: { "locatorType": 6, "locatorValue": «// XCUIElementTypeLink [@ name = 'title'] " }

+0

Звоните [sqlite3_errmsg()] (http://www.sqlite.org/c3ref/errcode.html). –

+0

Я пробовал позвонить sqlite3_errmsg(), но без ошибок. Msg – vasco

+0

Показать код. –

ответ

0

Проблема была решена путем изменения команды: не передавать параметры в запросы с использованием конкатенации строк, формата,% и т. Д .;

char * sql2 = "insert into t_elementnode(opname,op,param) values(?,?,?)"; 
if(elementNode.opname) sqlite3_bind_text(stmt, 1, elementNode.opname.UTF8String, -1, NULL); 
if(elementNode.op) sqlite3_bind_text(stmt, 2, elementNode.op.UTF8String, -1, NULL); 
if(elementNode.param) sqlite3_bind_text(stmt, 3, elementNode.param.UTF8String, -1, NULL); 
Смежные вопросы