【问题标题】:what does if exist return如果存在返回什么
【发布时间】:2012-11-19 16:38:49
【问题描述】:

我正在使用 sqlite3 作为 ios 项目的数据库,并希望执行 if exists 语句以查看对象是否存在,如果存在,则更新或插入。

我正在使用这个函数来查询数据库

-(void)updateStatus:(NSString *)queryString {
    NSString    *docsDir;
    NSArray     *dirPaths;
    dirPaths    = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    docsDir     = [dirPaths objectAtIndex:0];
    m_singleton = [Singleton sharedSingleton];

    strDatabasePath         = [NSString stringWithString:[docsDir stringByAppendingPathComponent:@"BorneoMotors.db"]];
    NSFileManager *filemgr  = [NSFileManager defaultManager];

    if ([filemgr fileExistsAtPath: strDatabasePath] == YES)
    {
        const char *dbpath = [strDatabasePath UTF8String];
        if (sqlite3_open(dbpath, &sqlDatabase) == SQLITE_OK)
        {
            const char* beginString = "BEGIN;";
            sqlite3_stmt *compiledstatement;
            sqlite3_prepare_v2(sqlDatabase, beginString, -1, &compiledstatement, NULL);
            if (sqlite3_step(compiledstatement) == SQLITE_DONE) {}
            else NSLog(@"Failed!");
            sqlite3_finalize(compiledstatement);



            NSLog(@"QUERY : %@",queryString);

            const char *selectStatement = [queryString UTF8String];

            sqlite3_prepare_v2(sqlDatabase, selectStatement, -1, &compiledstatement, NULL);
            //sqlite3_bind_text(compiledstatement,1,[statusString UTF8String],-1,SQLITE_TRANSIENT);

            if (sqlite3_step(compiledstatement) == SQLITE_DONE) {}
            else NSLog(@"Failed!");
            sqlite3_finalize(compiledstatement);


            const char* endString="END;";
            sqlite3_prepare_v2(sqlDatabase, endString, -1, &compiledstatement, NULL);
            if (sqlite3_step(compiledstatement) == SQLITE_DONE) {}
            else NSLog(@"Failed!");
            sqlite3_finalize(compiledstatement);

            sqlite3_close(sqlDatabase);
        }
        else NSLog(@"Failed to open table");
    }

}

我遇到的问题是,如果存在的话会返回什么,我该如何继续。

NSString *checkstring = [NSString stringWithFormat:@"IF EXISTS (SELECT * FROM DATABASE WHERE id = %@",cars.ID];
                    DB *accessdb = [[DB alloc] init];
                    [accessdb updateStatus:checkstring];
                    if (??){
                        NSString *queryString = [NSString stringWithFormat: @"UPDATE DATABASE SET STATUS='%@' WHERE \"DATABASEID\" = '%@'", cars.status,cars.ID];
                        const char *selectStatement = [queryString UTF8String];

                        sqlite3_prepare_v2(sqlDatabase, selectStatement, -1, &statement, NULL);
                        //sqlite3_bind_text(compiledstatement,1,[statusString UTF8String],-1,SQLITE_TRANSIENT);

                        if (sqlite3_step(statement) == SQLITE_DONE) {}
                        else NSLog(@"Failed!");
                        sqlite3_finalize(statement);
                    }else{
                        insert}

如何检查对象是否存在? if exists 返回什么?需要一些指导...

【问题讨论】:

    标签: ios sql sqlite


    【解决方案1】:

    SQLite 没有IF 语句。

    要检查某些记录是否存在,只需执行类似的查询

    SELECT 1 FROM database WHERE ID = ?
    

    并在您的应用中测试您是否获得记录。

    对于您的更新/插入问题:如果您在键列上有唯一索引,您可以使用INSERT OR REPLACE command,如果新记录会创建重复记录,它会自动删除旧记录。

    【讨论】:

      猜你喜欢
      • 2013-02-27
      • 2016-07-13
      • 1970-01-01
      • 2011-04-15
      • 2012-07-08
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      相关资源
      最近更新 更多