0

データベースからデータを選択するのに問題があります。ここでは早すぎるかもしれませんが、何も返されないように見えますが、ブレークポイントを挿入して while ステートメント内で停止すると、コードのその部分に到達しません。私はこれで何かを台無しにしましたか?create ステートメントはかなり長いので省略しましたが、含まれているため関係ないと思いますIF NOT EXISTS。また、データベースにすべてのデータがあることも確認しました。

sqlite3 *database;
if(sqlite3_open([[self dataFilePath] UTF8String], &database)
   != SQLITE_OK) {
    sqlite3_close(database);
    NSAssert(0,@"Failed to open database");
}

NSString *createSQL = @"--CREATE STATEMENT HERE --";

char *errorMsg;

if(sqlite3_exec (database, [createSQL UTF8String], NULL, NULL, &errorMsg) != SQLITE_OK) {
    sqlite3_close(database);
    NSAssert(0,@"Error creating table: %s", errorMsg);
}

NSString *query = @"SELECT name, number FROM DATA";
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil) == SQLITE_OK) {
    while (sqlite3_step(statement) == SQLITE_ROW) {
        int myNumber = sqlite3_column_int(statement, 1);
        char *name = (char *)sqlite3_column_text(statement, 0);
        NSString *message = [NSString stringWithFormat:@"Number: %d, Name: %@", myNumber,name];
        //DO MORE STUFF HERE.
    }
    sqlite3_finalize(statement);
}
sqlite3_close(database);

dateFilePath メソッド:

-(NSString*)dataFilePath {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    return [documentsDirectory stringByAppendingPathComponent:@"Spaces.sqlite"];
}
4

2 に答える 2

0

データがそこにあることを確認したと言っていますか、シミュレーターの Documents フォルダーのコピーを見ましたか、それとも Xcode プロジェクトのコピーを確認しましたか? (可能であれば、シミュレーターのアプリの Documents フォルダーにあるデータベースの内容を実際に確認する必要があります。) 私が尋ねる理由は、非常によくある間違いが、 への呼び出しが成功したsqlite3_openということは、データベースが見つかったことを意味すると想定することです。そうではありません。データベースが見つからない場合は、空のデータベースが作成されます。

コンパイルの前にデータベースを準備している場合は、ここで説明するsqlite3_open_v2代わりに使用することを強くお勧めしますsqlite_open: SQLite は、Xcode でデータベースにアクセスするときにクエリを準備しません。

したがって、これが問題である場合は、次のことをお勧めします。

  1. シミュレーターをリセットして (シミュレーター メニューの [コンテンツと設定のリセット] を使用するか、アプリを削除して再インストールします)、空のデータベースを削除します。

  2. 上記のリンクで説明されているように、データベースがバンドルに含まれていることを確認してください。

  3. ここで説明されているように、プログラムでデータベースをバンドルからドキュメントにコピーしてください: Unable to connect SQLite Database in iOS

  4. 上記の 2 つのリンクのいずれかで説明されているように使用sqlite3_open_v2します。

于 2012-07-30T20:04:21.007 に答える
0

あなたは名前と番号を選択しています..しかし、何から?SQLクエリステートメントを終了する必要があります..

于 2012-07-30T13:19:17.917 に答える