数据库insert语句:目标C中的Sqlite数据库插入语句

我尝试只插入两个整数变量到我的 sqlite 数据库。我创建了一个名为 ups.sqlite 的数据库,它有一个表 (upssTable),表有两列。但是当我打开 / Users / ds / Library / Application Support / iPhone Simulator / 5.0 / Applications / FCB4B455-4B7F-4C47-81B6-AC4121874596 /

- (IBAction)onClick:(id)sender {
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSString *dbPath = [self getDBPath];
BOOL success = [fileManager fileExistsAtPath:dbPath]; 
if(!success) {
    NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"ups.sqlite"];
    success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];
    if (!success) 
        NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
}   
NSLog(@"database path %@",dbPath);
if(!(sqlite3_open([dbPath UTF8String], &cruddb) == SQLITE_OK))
{
    NSLog(@"An error has occured.");
}
if(sqlite3_open([dbPath UTF8String], &cruddb) ==SQLITE_OK){
    NSString *  str1 =@"1";
    NSString * str2 =@"1";
    const char *sql = "INSERT INTO upssTable (column1, column2) VALUES (?,?)"; 
    NSInteger result = sqlite3_prepare_v2(cruddb,sql, -1, &stmt, NULL);
    NSLog(@"upss %s\n", sqlite3_errmsg(cruddb));
    if(result == SQLITE_OK)        
    {
        sqlite3_bind_int(stmt, 1, [str1 integerValue]);
        sqlite3_bind_int(stmt, 2, [str2 integerValue]);
    }
    else
    {
        NSAssert1(0, @"Error . '%s'", sqlite3_errmsg(cruddb));                        
    }
    sqlite3_reset(stmt);
    sqlite3_finalize(stmt);
    sqlite3_close(cruddb);
}
}
- (NSString *) getDBPath {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
return [documentsDir stringByAppendingPathComponent:@"ups.sqlite"];
}

我怎样才能解决这个问题?请帮助我。谢谢你的回复。

6

你没有使用 sqlite3_step()。试试这种方式...

sqlite3 *database; 
 dbPath=[self.databasePath UTF8String];
    if(sqlite3_open(dbPath,&database)==SQLITE_OK)
    {
        const char *sqlstatement = "INSERT INTO upssTable (column1, column2) VALUES (?,?)"; 
        sqlite3_stmt *compiledstatement;
        if(sqlite3_prepare_v2(database,sqlstatement , -1, &compiledstatement, NULL)==SQLITE_OK)
        {
             NSString *  str1 =@"1";
    NSString * str2 =@"1";
      sqlite3_bind_int(compiledstatement, 1, [str1 integerValue]);
        sqlite3_bind_int(compiledstatement, 2, [str2 integerValue]);
         if(sqlite3_step(compiledstatement)==SQLITE_DONE)
            {
                NSLog(@"done");
            }
            else NSLog(@"ERROR");
            sqlite3_reset(compiledstatement);
    }
    else
    {
        NSAssert1(0, @"Error . '%s'", sqlite3_errmsg(cruddb));                        
    }
    sqlite3_close(database);
}
5

您正在创建 sqlite3 语句,但实际上并没有使用sqlite3_step()执行它。

你似乎也打开数据库两次?

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(309)
彩六一直连接服务器:几个小时后 我一直失去与MySQL服务器的连接
上一篇
数据库数据表的创建:如何将数据表插入SQLServer数据库表
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(59条)