【问题标题】:insert method for sqlite in iphoneiphone中sqlite的插入方法
【发布时间】:2013-03-05 00:28:07
【问题描述】:

recordDict 是一个NSMutableDictionary,其键与表的列名相同。

-(void) insertRecord:(NSMutableDictionary *)recordDict tableName:(NSString *)table{

    @try {

        if (sqlite3_open([databasePath UTF8String], &database)==SQLITE_OK) {

            NSMutableString *statement=[NSMutableString stringWithFormat:@"insert into %@ (",table];
            sqlite3_stmt *compiledStatement;
            NSArray *keys=[recordDict allKeys];
            for (int i=0; i< [keys count]; ++i) {
                [statement appendString:[keys objectAtIndex:i]];
                int j=i+1;
                if (j == [keys count]) {
                    [statement appendString:@")"];
                }
                else
                {
                    [statement appendString:@","];
                }
            }
            [statement appendString:@" values ("];
            for (int i=0; i < [keys count]; ++i) {
                [statement appendString:[recordDict objectForKey:[keys objectAtIndex:i]]];
                int j=i+1;
                if (j == [keys count]) {
                    [statement appendString:@")"];
                }
                else
                {
                    [statement appendString:@","];
                }
            }

            const char *sqlstatement = [statement UTF8String];
            if (sqlite3_prepare_v2(database, sqlstatement, -1, &compiledStatement, NULL)== SQLITE_OK)
            {
                if (SQLITE_DONE!=sqlite3_step(compiledStatement) ) 
                {
                    NSAssert1(0,@"Error when inserting  %s",sqlite3_errmsg(database));
                }
                else 
                {
                    //NSLog(@"Data inserted Successfully");
                }
                //[recordDict release];
            }
            else {
                //NSLog(@"Failed with error");
                NSAssert1(0,@"Error when creation %s",sqlite3_errmsg(database));

            }

        }
        sqlite3_close(database);
    }
    @catch (NSException *exception) {
        NSLog(@"Error info is %@",[exception description]);
    }

}

此代码给出了所需的结果,适用于任何表格。但我想要小代码。谁能帮帮我?

【问题讨论】:

    标签: iphone ios sqlite insert


    【解决方案1】:
    -(void)tableInsert:(NSString*)field1 Into:(NSString*)field2 intoTable:(NSString*)field3:(NSString*)field4
     {
    char *err;
    
    NSString *sql=[NSString stringWithFormat:@"INSERT OR REPLACE INTO 'tablename' ('f1' , 'f2','f3','f4') VALUES ( '%@','%@','%@','%@')",field1,field2,field3,field4];
    NSLog(@"%@",sql);
    if(sqlite3_exec(db,[sql UTF8String], NULL, NULL, &err)!=SQLITE_OK)
       {
        sqlite3_close(db);
        NSAssert(0,@"Error updating table");
       }
    }    
    

    这是最简单的方法。

    【讨论】:

    • 谢谢。但我想要一种适用于任何列数的表的方法。我的代码适用于具有任意列数的任何表,但它太大了,所以我想要一个小而高效的代码
    • 然后使用:-(void)tableInsert:(NSDictionary*)fields char *err; NSString *sql=[NSString stringWithFormat:@"INSERT OR REPLACE INTO 'tablename' ('f1' , 'f2','f3','f4') VALUES ('%@','%@','%@' ,'%@')",[字段 valueForKey:@"field1"],[字段 valueForKey:@"field2"],[字段 valueForKey:@"field3"],[字段 valueForKey:@"field4"]]; NSLog(@"%@",sql); if(sqlite3_exec(db,[sql UTF8String], NULL, NULL, &err)!=SQLITE_OK) { sqlite3_close(db); NSAssert(0,@"更新表出错"); } }
    • 再次指定列名
    • 您必须为每个表创建相同的结构并具有相同的字段名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 2011-02-09
    • 2013-02-05
    • 1970-01-01
    • 2011-01-27
    相关资源
    最近更新 更多