2012-04-02 59 views
1

我尝试只插入两个整数变量到我的sqlite数据库。我创建了一个名为ups.sqlite的数据库,它有一个表(upssTable),表中有两列。但是当我打开/ Users/ds/Library/Application Support/iPhone Simulator/5.0/Applications/FCB4B455-4B7F-4C47-81B6-AC4121874596/SqliteDeneme.app/ups.sqlite时,ups.sqlite中没有数据。我的代码在这里:Sqlite数据库插入目标C语句

- (IBAction)buttonClick:(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 [email protected]"1"; 
    NSString * str2 [email protected]"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"]; 
} 

我该如何解决这个问题?请帮帮我。感谢您的回复。

回答

5

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

此外,你似乎打开数据库两次?

5

你还没有使用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 [email protected]"1"; 
    NSString * str2 [email protected]"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); 
}