2012-04-02 29 views
1

私はsqliteデータベースに2つの整数変数のみを挿入しようとしています。私は名前がups.sqliteであるデータベースを作成しました。これは1つのテーブル(upssTable)を持ち、テーブルには2つのカラムがあります。しかし、/ Users/ds/Library/Application Support/iPhone Simulator/5.0/Applications/FCB4B455-4B7F-4C47-81B6-AC4121874596/SqliteDeneme.app/ups.sqliteを開くと、ups.sqliteにデータがありません。私のコードはここにあります:Objective CのSqliteデータベース挿入ステートメント

- (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()を使用して実行していません。

また、データベースを2回開いているようですか?

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); 
} 
関連する問題