2012-05-07 9 views
0

現在、データを取り出すことができるテーブルがあります。私がしたいのは、テーブルがバンドルにすでに存在するかどうかをチェックし、そうでなければ、テーブルを作成してバンドルに保存する(パスがメインバンドルにあることを意味する)。私は、データベースをチェックして、setInputメソッドの最上部に作成します。私はこれに似た何かのためにSOを精練してきましたが、私はまだ何も思い付いていません。どんな助けもありがとうございます。ここに私のコードは次のとおりです。テーブルが存在するかどうかを確認し、存在しない場合は作成してください... iOS/SQLite

-(IBAction)setInput:(id)sender 
{ 
    NSString *strStoreNumber; 
    NSString *strRegNumber; 

    strStoreNumber = StoreNumber.text; 
    strRegNumber = RegNumber.text; 
    lblStoreNumber.text = strStoreNumber; 
    lblRegNumber.text = strRegNumber; 

    NSString* databasePath = [[NSBundle mainBundle] pathForResource:@"tblStore" ofType:@"sqlite"]; 

    if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) 
    { 
     NSLog(@"Opened sqlite database at %@", databasePath); 
     sqlite3_exec(database, "CREATE TABLE IF NOT EXISTS tblStore (ID INTEGER PRIMARY KEY AUTOINCREMENT, Message TEXT)", NULL, NULL, NULL); 
     //...stuff 
    } 
    else 
    { 
     NSLog(@"Failed to open database at %@ with error %s", databasePath, sqlite3_errmsg(database)); 
     sqlite3_close (database); 
    } 
//  
    NSString *querystring; 

    // create your statement 
    querystring = [NSString stringWithFormat:@"SELECT strStore, strReg FROM tblStore WHERE strStore = %@ AND strReg = %@;", strStoreNumber, strRegNumber]; 

    const char *sql = [querystring UTF8String]; 

    NSString *szStore = nil; 
    NSString *szReg = nil; 

    sqlite3_stmt *statement = nil; 
    if (sqlite3_prepare_v2(database, sql, -1, &statement, NULL)!=SQLITE_OK) //queryString = Statement 
    { 
     NSLog(@"sql problem occured with: %s", sql); 
     NSLog(@"%s", sqlite3_errmsg(database)); 
    } 
    else 
    { 
     // you could handle multiple rows here 
     while (sqlite3_step(statement) == SQLITE_ROW) 
     {    
      szStore = [NSString stringWithUTF8String:(char*)sqlite3_column_text(statement, 0)]; 
      szReg = [NSString stringWithUTF8String:(char*)sqlite3_column_text(statement, 1)]; 
     }   

    } 

    sqlite3_finalize(statement); 

    lblStoreNumber.text = szStore; 
    lblRegNumber.text = szReg; 

// 
} 

私はまだiOSとSQLiteのに非常に新しいので、私は私が何をしようとしているの正確な十分な説明を提供しなかった場合、私は知っていると私はみますもう少し詳しく言うと。ありがとう!

答えて

5

「iphone sql create tableが存在しない場合は」という簡単な検索結果がthisになりました。

SQLのこの部分は、あなたが探しているものはおそらくです:

CREATE TABLE IF NOT EXISTS tableName(...) 

が存在しない場合は、テーブルを作成します。

+0

私はsqlite3_openメソッドの下で自分のコードを編集し、同様のロジックをテーブル作成用に追加しました。私は私のプロジェクト(Finderを介して)私の既存のテーブルを削除し、私はエラーが発生します: "エラー:/ユーザー/マット**** /ドキュメント/ iOSのプロジェクト/ CCoDBTry/CCoDBTry/tblStore。 sqlite:そのようなファイルやディレクトリはありません "。あなたはこれについてもう少し詳しく知ることができますか? – Skizz

+0

私はそれが存在しないようにする方法にも従っていないと思います。私はFinderのプロジェクトの場所からそれを削除することがそのトリックを行うと思ったが、私がそれを行うときにコンパイルすることはできない。何かご意見は? – Skizz

+0

テーブルだけでなくデータベース全体を削除したようです。 Finderで削除したデータベースファイルを復元してから、もう一度試してみてください。その特定のテーブルだけを削除したい場合は、 'DROP TABLE tableName'を使うことができます。また、[このブログ](http://www.icodeblog.com/2008/08/19/iphone-programming-tutorial-creating-a-todo-list-using-sqlite-part-1/#init- db)。 – matsr

関連する問題