SQLite3のREPLACEINTOの使用法について基本的な質問をしたいだけです。他のすべてのデータベースコードは機能していますが、REPLACE INTOステートメントは機能しているようですが、機能していません。変数dbRowに保持されている指定された行IDidのデータをREPLACEするためにREPLACEINTOを期待します。
insertSQL = [NSString stringWithFormat: @"REPLACE INTO script ( id, nrec, url ) VALUES ( \"%d\", \"%d\", \"%@\" )", dbRow, recN, fileLoc ];
insert_stmt = [insertSQL UTF8String];
if( sqlite3_exec(scriptDB, [insertSQL UTF8String], NULL, NULL, &errorSQL ) == SQLITE_OK) {
NSLog( @"dB updated at row=%d with nrec=%d and URL=%@.", dbRow, recN, fileLoc );
} else {
NSLog(@"Line Not replaced. Error: %s", errorSQL );
}
上記は機能します:OK条件は、私が見たいものを正確に示しています。エラーはありません。後で、このデータを使用する必要があるときに、元のデータを置き換えませんでした。したがって、テストを行うために、同じ方法ですぐにSELECTを実行します。
querySQL = [NSString stringWithFormat: @"SELECT id, nrec, url FROM script WHERE title=\"%@\" AND nline=\"%d\"", myTitle, myLineN ];
query_stmt = [querySQL UTF8String];
if( sqlite3_prepare_v2(scriptDB, query_stmt, -1, &statement, NULL) == SQLITE_OK) {
NSLog(@"Just Replaced Query prepared");
while( sqlite3_step(statement) == SQLITE_ROW ) {
myID = sqlite3_column_int(statement, 0);
myNRec = sqlite3_column_int(statement, 1);
myURL = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 4)];
}
sqlite3_finalize(statement);
NSLog( @"Line %d of %@ has: recN=%d in row=%d at url: %@", myLineN, myTitle, myNRec, myID, myURL );
} else {
NSLog( @"Error: %s", errMsg );
}
私がデータベースに置き換えたのと同じものが表示されることを期待しています。私はしません。REPLACEの前に、元のデータが表示されます。ないのになぜあると言うのですか?