2017-01-17 9 views
0

で失敗しました、それは常に例えばリターンコードSQLITE_ERRORInsertコマンドは、DBにデータを挿入するとき、私は、sqlite3のデータベースを持っている戻りコード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、OP:11、PARAM:{ "locatorType":6、 "locatorValue":「// XCUIElementTypeLink [@ name = 'title']「 」

+0

[sqlite3_errmsg()](http://www.sqlite.org/c3ref/errcode.html)を呼び出します。 –

+0

私はsqlite3_errmsg()を呼び出そうとしましたが、エラーメッセージはありません – 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); 
関連する問題