2013-03-02 19 views
10

私は、私がやっているsqliteプロジェクトに問題があります。私はFMDBを使用しています。私は簡単な例に従いますが、うまくいきません。そして、私はエラーを見つけることができません。私は端末からデータベースのスキーマを作成しました。データをいくつか入れました。私はios devにはとても新しいので、私はステップをOKにしたかどうかは分かりません。 これは私がやったことです:FMDB ios no such table

1 - データベーススキーマを作っていくつかのフィールドを追加しました。 2 - database.dbをxcodeのプロジェクトフォルダにコピーしました。 3 - FMDBファイルを追加します。 4 - 私はsqlite3.dylib 5追加 - 私はこのコードを置く:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.dbname = @"database.db"; 
    NSArray * docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString * docDIr = [docPath objectAtIndex:0]; 
    self.dbpath = [docDIr stringByAppendingPathComponent:dbname]; 

    [self checkDB]; 

    [self getQ]; 

    return YES; 
} 
-(void) getQ 
{ 
    FMDatabase * db = [FMDatabase databaseWithPath:dbpath]; 
    [db open]; 

    FMResultSet * result = [db executeQuery:@"SELECT * FROM table1"]; 

    NSLog(@"last Error: %@",[db lastErrorMessage]); 
    NSLog(@"result: %@", result); 
} 
-(void) checkDB 
{ 
    BOOL success; 
    NSFileManager * fm = [NSFileManager defaultManager]; 
    success = [fm fileExistsAtPath:dbpath]; 
    NSError * error = [[NSError alloc] init]; 
    if (success) return; 
    NSLog(@"result:"); 
    NSString * dbPathFromApp = [[[NSBundle mainBundle] resourcePath]stringByAppendingPathComponent:self.dbname]; 

    [fm copyItemAtPath:dbPathFromApp toPath:dbpath error:&error];   
} 

をどうやらデータベースはそれが空だ、だから何が起こったのか?なぜ私はtable1を見つけることができないのですか?任意のsqlite GUIでファイルを開くと、テーブルが正常に表示されます。ありがとうございました コンソールは私に次の行を表示します: 2013-03-02 14:03:31.839 myApp [21433:c07]最後のエラー:そのようなテーブルはありません:table1 2013-03-02 14:03:31.841 myApp [21433:C07]結果:(ヌル)

答えて

24

思考のカップル:

  1. 私は、データベースを確認したいが、あなたのバンドルに追加されました。ターゲット設定に移動し、[ビルド段階]を選択し、[バンドルリソースをコピー]を展開して、そこにデータベースがリストされていることを確認します。そうでない場合は、「+」ボタンをクリックして追加します。

    bundle

  2. 私はあなたのシミュレータをリセットしたいです。アプリを実行してデータベースを正しくコピーしなかった場合、ドキュメントフォルダに空のデータベースが作成されていたはずです。あなたのシミュレータをリセットすることで、そこにある可能性のある空のデータベースを取り除くことができます。

  3. まだ動作しない場合は、シミュレータのバンドルデータベースを確認します。シミュレータのフォルダ(〜/ Library/Application Support/iPhone Simulator)に移動し、アプリケーションを見つけてバンドルを開き(コントロールをクリックして "パッケージ内容を表示"と言う)、データベースをチェックしてmakeそれはあなたのtable1を持っていることを確認してください。

+3

ありがとうございました!それで、ステップ1と2は完璧に動作します!私はステップ、初心者の間違いを忘れます:D – Fede

+0

あなたのポイント2は私が忘れたものです。バンドルからドキュメントディレクトリにデータベースをコピーしませんでした。 – Suragch

+0

ありがとうございました!〜ステップ1は私がする必要があったものでした:) –

関連する問題