1. ホーム
  2. sqlite

[解決済み] No Such Table エラー

2022-02-07 15:11:36

質問

このエラーに関する多くの投稿を検索しましたが、まだ問題を解決することができません。以下は私のコードですが、何が間違っているのか、どなたか教えていただけませんか?

- (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  ");
    }
}

解決方法は?

テーブルがない CoffeeSQL.sqlite .

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

データベース内にどのようなテーブルがあるかは SELECT * FROM sqlite_master; クエリを実行します。