只想问一个关于 SQLite3 的 REPLACE INTO 用法的基本问题。我所有其他数据库代码都在工作,但 REPLACE INTO 语句似乎工作,但不存在。我期望 REPLACE INTO 来替换指定行 ID 中的数据,id 保存在变量 dbRow 中。
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 之前。为什么它说它在那里而不是它?