2011-09-11 31 views
0

私はSQLiteデータベースを持っていますが、SQLiteブラウザで開くことができます。クエリを実行できます。しかし、私のXcodeプロジェクトではデータを取得できません。iOS、SQLite:DBから読み込むことができません

NSString *databaseName = @"dbFile.db"; 
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDir = [documentPaths objectAtIndex:0]; 
NSString *databasePath = [documentsDir stringByAppendingPathComponent:databaseName]; 
sqlite3 *database; 

if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) { 
    NSLog(@"db is ok"); // works just fine 
    const char *sqlStatement = "SELECT table.column FROM table"; 
    sqlite3_stmt *compiledStatement; 

    if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) { 
     NSLog(@"OK"); // nothing happens 
    } 
    sqlite3_close(database); 
} 

Mac用のSQLiteブラウザから実行されたのと同じクエリがうまくいきます。

+0

sqliteによって報告されたエラーを確認し、ログに記録する必要があります。おそらく間違っていると思われます。 – Mat

+0

@ufw:これは機能しますか? 'select col from table'、つまり、column-nameの前にtable-nameを付けないでください。 – Tim

+0

どちらの方法でも、SQLiteログには適切なテーブルが見つかりませんでした。しかし、前にも述べたように、スタンドアロンのSQLiteブラウザでデータを取得できます。 – ufw

答えて

1

sqlite3_openは、データへのアクセスを開始するまで、すべてのエラーを報告しません。たとえば、すべてのファイル名とパスはエラーなしで渡されます。

データベースはドキュメントフォルダにありますか?それはデフォルトではありません。 おそらくそれはメインバンドルにありますか?

Try NSString * databaseName = [[NSBundle mainBundle] pathForResource:@ "db"]の "dbFile";

+0

あなたは正しいです、ありがとう! – ufw

+1

指定されたパスにDBが存在しない場合は、新しい空のDBが作成されます。したがって、オープンする前に、存在を確認する必要があります。おそらく、リソースディレクトリの読み取り専用DBをdocディレクトリにコピーする必要があります。 –

関連する問題