24

これらのエラーに関する多くの投稿を検索する必要がありましたが、それでも問題を解決できません。これが私のコードです。何が問題なのかを知るのを手伝ってくれる人はいますか?

- (void) copyDatabaseIfNeeded {


    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
   NSString *path = [documentsDirectory stringByAppendingPathComponent:@"SQL.sqlite"];

    if (sqlite3_open([path UTF8String], &newDBconnection) == SQLITE_OK) 
    {
        NSLog(@"Database opened successfully");

if(updateStmt == nil) {
            NSString *updStmt = [NSString stringWithFormat: @"UPDATE Coffee SET CoffeeName = '500 Plus', Price = '1.40' Where CoffeeID= '3'"];
   const char *mupdate_stmt = [updStmt UTF8String]; 

if(sqlite3_prepare_v2(newDBconnection, mupdate_stmt, -1, &updateStmt, NULL) != SQLITE_OK){
NSAssert1(0, @"Error while creating update statement. '%s'", sqlite3_errmsg(newDBconnection));
            } else {
                NSLog(@"Update successful");
            }

        }
        if(SQLITE_DONE != sqlite3_step(updateStmt))
            NSAssert1(0, @"Error while updating. '%s'", sqlite3_errmsg(newDBconnection));
        else {
            sqlite3_reset(updateStmt);
            NSLog(@"Step successful");

        }
    } 
    else 
    {
        NSLog(@"Error in opening database  ");
    }
}
4

3 に答える 3

46

にはテーブルがありませCoffeeSQL.sqlite

SQLite は、データベース ファイルが存在しない場合、黙って作成します。したがって、path間違っている場合は、空のデータベース ファイルを開いていることになります。もちろん、このファイルにはテーブルが含まれていません。そこにデータベース ファイルが存在し、空でないことを確認します。

クエリを実行すると、データベースにあるテーブルを確認できSELECT * FROM sqlite_master;ます。

于 2012-08-24T07:15:04.297 に答える
3

データベース (この場合は Oracle) に問題がある場合、DBA が私に教えてくれることの 1 つは、コマンド ライン ツールを使用してクエリを実行することです。

これは、sqlite3 と iPhone シミュレータの問題を診断する方法です。

  1. iPhone シミュレーターでアプリを実行して、データベースが Documents ディレクトリに作成/コピーされるようにします。
  2. ターミナルを起動
  3. cd ~/Library/Application Support/iPhone Simulator/<version>/Applications/<your-app-hash>/Documents. どのアプリが何であるかが明確になるように、シミュレーターにアプリを 1 つだけインストールすることをお勧めします。
  4. sqlite3 SQL.sqliteそこからクエリを試してください。コマンドを使用し.schemaて、スキーマがどのように見えるかを確認することもできます。

クエリがそこで機能し、アプリでは機能しない場合は、バグがあることがわかります。それ以外の場合は、sqlite クエリの問題または壊れたスキーマがあります。

于 2012-08-24T07:08:29.147 に答える