我正在尝试创建一个sql语句,它检查一个表以确保行dosnt已经存在,我尝试使用以下代码,但似乎无法工作。
+ (void) AddToCOLDatabase : (NSString*) AgeRange : (NSString*) MainArea : (NSString*) SubArea : (NSString*) Framework{
NSString* updateSQL;
sqlite3_stmt* updateStmt;
sqlite3_open([dbObservationPathString UTF8String], &ObservationDB);
updateSQL = [NSString stringWithFormat: @"IF NOT EXISTS (SELECT * FROM OBSERVATIONS WHERE LEVEL0 = '%@' AND LEVEL1 = '%@' AND LEVEL2 = '%@' AND LEVEL3 = '%@') INSERT INTO OBSERVATIONS(LEVEL1,LEVEL2,LEVEL3, LEVEL0) values (?,?,?,?)",AgeRange, MainArea, SubArea,Goal];
sqlite3_prepare_v2(ObservationDB, [updateSQL UTF8String], -1, &updateStmt, NULL);
sqlite3_bind_text(updateStmt, 1, [AgeRange UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(updateStmt, 2, [MainArea UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(updateStmt, 3, [SubArea UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(updateStmt, 4, [Framework UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_step(updateStmt);
sqlite3_finalize(updateStmt);
sqlite3_close(ObservationDB);
}
上面的代码dosnt工作数据库没有改变,我只是想知道是否有人可以给我一个正确的方向轻推,也就像修改如果是这样,如果一个条目是一个条目,也返回主键OBSERVATIONSID制作,我知道它与OUTPUT有关但不知道比那更多 感谢
答案 0 :(得分:1)
您可以使用INSERT OR REPLACE
:
INSERT OR REPLACE INTO OBSERVATIONS(LEVEL1,LEVEL2,LEVEL3, LEVEL0) values (?,?,?,?)
为了使其按预期工作,您需要一个不应重复的字段的唯一索引。