2012-03-23 11 views
1

iphoneアプリケーションのsqliteデータベースにデータをプッシュする際に問題があります。iphoneアプリのsqlite dbエラー:そのようなテーブルなし

すべてが作成している}

-(IBAction)createButtonPressed:(id)sender 
{ 
    NSLog(@"createButtonPressed: called"); 
    status.text=[status.text stringByAppendingString:@"create button pressed.\n"]; 
    NSString *docsDir; 
    NSArray *dirPaths; 

    // Get the documents directory 
    dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 

    docsDir = [dirPaths objectAtIndex:0]; 

    // Build the path to the database file 
    self.databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent: @"database.sqlite"]]; 

    NSFileManager *filemgr = [NSFileManager defaultManager]; 

    if ([filemgr fileExistsAtPath: databasePath ] == NO) 
    { 
     status.text=[status.text stringByAppendingString:@"creating database... "]; 
     status.text=[status.text stringByAppendingFormat:@"path: %@\n\n", databasePath]; 

    const char *dbpath = [databasePath UTF8String]; 

     if (sqlite3_open(dbpath, &database) == SQLITE_OK) 
     { 
      status.text=[status.text stringByAppendingString:@"database opened successfully\n"]; 

      char *errMsg; 
      const char *sql_stmt; 
      NSString *sqlStatement=[[NSString alloc] init]; 

      /* 
      CREATING JOB TABLE 
      */ 
      [email protected]""; 
      [sqlStatement stringByAppendingString:@"CREATE TABLE IF NOT EXISTS JOB "]; 
      [sqlStatement stringByAppendingString:@"(ID INTEGER PRIMARY KEY AUTOINCREMENT, "]; 
      [sqlStatement stringByAppendingString:@"NUMBER TEXT, "]; 
      [sqlStatement stringByAppendingString:@"DATE_LOADING INTEGER, "]; 
      [sqlStatement stringByAppendingString:@"DATE_DEPARTURE INTEGER, "]; 
      [sqlStatement stringByAppendingString:@"DATE_UNLOADING INTEGER, "]; 
      [sqlStatement stringByAppendingString:@"ORIGIN INTEGER, "]; 
      [sqlStatement stringByAppendingString:@"DESTINATION INTEGER, "]; 
      [sqlStatement stringByAppendingString:@"SUPPLIER INTEGER, "]; 
      [sqlStatement stringByAppendingString:@"RAILROAD INTEGER, "]; 
      [sqlStatement stringByAppendingString:@"FOREMAN INTEGER, "]; 
      [sqlStatement stringByAppendingString:@"WEATHER INTEGER, "]; 
      [sqlStatement stringByAppendingString:@"COMMENT TEXT, "]; 
      [sqlStatement stringByAppendingString:@"MODIFY_STATUS INTEGER)"]; 

      sql_stmt = [sqlStatement UTF8String]; 

      if (sqlite3_exec(database, sql_stmt, NULL, NULL, &errMsg) != SQLITE_OK) 
      { 
       status.text=[status.text stringByAppendingString:@"failed to create JOB table\n"]; 
      } 
      else 
      { 
       status.text=[status.text stringByAppendingString:@"JOB table created\n"]; 
      }; 


     status.text=[status.text stringByAppendingString:@"closing database...\n"]; 
     sqlite3_close(database); 

    } 
    else 
    { 
     status.text=[status.text stringByAppendingString:@"failed to open/create database\n"]; 
    }; 
} 
else 
{ 
    status.text=[status.text stringByAppendingString:@"database exists "]; 
    status.text=[status.text stringByAppendingFormat:@"path: %@\n\n", databasePath]; 
}; 

[status scrollRangeToVisible:NSMakeRange([status.text length], 0)]; 

OKです: は、ここで私は、データベースを作成する方法です。 でも!データコードプッシュ「は、このようなテーブルのJOB」を : 私は私のテーブルにデータをプッシュしようとすると、私はエラーを取得しない

NSLog(@"populateButtonPressed: called"); 
status.text=[status.text stringByAppendingString:@"populate button pressed.\n"]; 

NSFileManager *filemgr = [NSFileManager defaultManager]; 

if ([filemgr fileExistsAtPath: databasePath ] == YES) 
{ 
    const char *dbpath = [databasePath UTF8String]; 

    if (sqlite3_open(dbpath, &database) == SQLITE_OK) 
    { 
     status.text=[status.text stringByAppendingString:@"database opened successfully\n"]; 

     char *errMsg; 
     const char *sql_stmt; 
     NSString *sqlStatement=[[NSString alloc] init]; 

     /* 
     POPULATING JOB TABLE 
     */ 
     [email protected]"INSERT INTO JOB (NUMBER, DATE_LOADING, DATE_DEPARTURE, DATE_UNLOADING, ORIGIN, DESTINATION, SUPPLIER, RAILROAD, FOREMAN, WEATHER, COMMENT, MODIFY_STATUS) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; 

     sql_stmt = [sqlStatement UTF8String]; 
     sqlite3_stmt *stmt; 
     sqlite3_prepare_v2(database, sql_stmt, -1, &stmt, nil); 
     sqlite3_bind_text(stmt, 1, "number", -1, SQLITE_STATIC); //number 
     sqlite3_bind_int(stmt, 2, 100); //date_loading 
     sqlite3_bind_int(stmt, 3, 101); //date_departure 
     sqlite3_bind_int(stmt, 4, 102); //date_unloading 
     sqlite3_bind_int(stmt, 5, 103); //origin 
     sqlite3_bind_int(stmt, 6, 104); //destination 
     sqlite3_bind_int(stmt, 7, 105); //supplier 
     sqlite3_bind_int(stmt, 8, 106); //railroad 
     sqlite3_bind_int(stmt, 9, 107); //foreman 
     sqlite3_bind_int(stmt, 10, 108); //weather 
     sqlite3_bind_text(stmt, 11, "commentstring", -1, SQLITE_STATIC); //comment 
     sqlite3_bind_int(stmt, 12, 1); 

     if (sqlite3_step(stmt)!=SQLITE_DONE) 
     { 
      status.text=[status.text stringByAppendingString:@"WARNING!!! Could not step (execute) stmt\n"]; 
      status.text=[status.text stringByAppendingFormat:@"error: %@\n", [NSString stringWithUTF8String:sqlite3_errmsg(database)]]; 
     } 
     else 
     { 
      status.text=[status.text stringByAppendingString:@"it seems like stmt step (execute) was successfull"]; 
     }; 

     if(sqlite3_finalize(stmt)==SQLITE_DONE) 
     { 
      status.text=[status.text stringByAppendingString:@"finalizing stmt was successfull\n"]; 
     } 
     else 
     { 
      status.text=[status.text stringByAppendingString:@"WARNING!!! failed finalizing stmt\n"]; 
     }; 


     status.text=[status.text stringByAppendingString:@"closing database...\n"]; 
     sqlite3_close(database); 

    } 
    else 
    { 
     status.text=[status.text stringByAppendingString:@"failed to open database\n"]; 
    }; 
} 
else 
{ 
    status.text=[status.text stringByAppendingString:@"database does not exist. you need to create it.\n"]; 
}; 

[status scrollRangeToVisible:NSMakeRange([status.text length], 0)]; 

をデータベースがパスに存在し、正常に開きます。 iOS5 ipadアプリケーション、ARCを使用し、libsqlite3.dylib、私はシミュレータで自分のアプリケーションを実行しています。

+0

'sqlite3_prepare_v2(データベース、sql_stmtに、-1、&stmtは、nilを);'まさにこの行の後、私はエラーを取得する: "いいえ、そのようなテーブルのJOB" – Oleg

答えて

1

あなたのdbパスは正しいですか?なぜあなたの端末を最初にチェックインしないのですか?

> sqlite3 <your_db_path> 

> show tables; 
+0

'lifeinlagsworkstation:ドキュメントlifeinlags $ sqlite3のdatabase.sqlite のSQLiteバージョン3.6.12 指示に ".help"を入力してください ";"で終了したSQL文を入力してください。 sqlite>テーブルを表示 ...> – Oleg

+0

ファイルdatabase.sqliteがあります。しかし、それはどこにテーブルが作成されていないようです。どうして?私のコードに何が問題なの? (あなたは私の質問の上にテーブルのコードを作成することができます) – Oleg

+1

私はそれを疑う。まあ、bit.ly/iUPld0で2分をスペアすることをお勧めします。私は周りに多くのSQLラッパークラスがある場合、多くの苦痛のプレーンなsqlite3原因を使用するのが嫌なので私は知らない。 bit.ly/GFOS1Q –

関連する問題