如何检查,记录是否存在于SQLite数据库的表中?

时间:2015-09-22 12:12:38

标签: ios objective-c sqlite

我正在查询关注表是否填充了记录。

NSString *selectSQL = @"SELECT EXISTS(SELECT 1 FROM tableName LIMIT 1)";
const char *selectSQLConstant = [selectSQL UTF8String];
sqlite3_stmt *statement = nil;
if(sqlite3_prepare_v2(_database, selectSQLConstant, -1, &statement, NULL) == SQLITE_OK) {
    if (sqlite3_step(statement) == SQLITE_ROW) {
        //even if the table is empty, condition is always true.
    }
}
sqlite3_finalize(statement);

这是正确的方式还是我需要添加的东西?

更新

我最后改变了我的查询,

NSString *selectSQL = @"SELECT COUNT(*) FROM tableName LIMIT 1";

但我的问题还有

2 个答案:

答案 0 :(得分:1)

使用此方法:

-(BOOL)recordExistOrNot:(NSString *)query{
    BOOL recordExist=NO;
    if(sqlite3_open([[self dataFilePath] UTF8String], &database) == SQLITE_OK)
    {
        sqlite3_stmt *statement;
        if (sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil)==SQLITE_OK)
        {
            if (sqlite3_step(statement)==SQLITE_ROW)
            {
                recordExist=YES;
            }
            else
            {
                //////NSLog(@"%s,",sqlite3_errmsg(database));
            }
            sqlite3_finalize(statement);
            sqlite3_close(database);
        }
    }
    return recordExist;
}

如果记录不存在,它将返回YES。例如:

NSString *query  = [NSString stringWithFormat:@"select * from yourtable where column_name = 'column_name'"];

        NSLog(@"query : %@",query);
        BOOL recordExist = [self recordExistOrNot:query];

        if (!recordExist) {
            // Insert your data
        }

希望它对你有所帮助。

答案 1 :(得分:1)

NSString *selectSQL = @"SELECT COUNT(*) FROM tableName LIMIT 1";

检查表中至少有一个条目...如果那就是你想要的,这很好