0

iOS経由でSQLiteデータベースに実際にデータを挿入するためにこのコードを取得するのに問題があります:

            NSString* inssql = [NSString stringWithFormat:@"INSERT OR IGNORE INTO roomData VALUES ('%@', '%i', '%@', '%@', '%@', '%@'); UPDATE roomData SET roomNumber='%@', roomName='%@', roomDesc='%@', roomHash='%@' WHERE roomID = '%@'", [row objectAtIndex:0],property,[row objectAtIndex:1],[row objectAtIndex:2],[row objectAtIndex:3],[row objectAtIndex:4],[row objectAtIndex:1],[row objectAtIndex:2],[row objectAtIndex:3],[row objectAtIndex:4],[row objectAtIndex:0]];
        sql = [inssql UTF8String];

        if (sqlite3_prepare(db, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
            NSLog(@"MESSAGE: Could not prepare this insert, %s", sqlite3_errmsg(db));
        } else {
            if (sqlite3_step(sqlStatement) == SQLITE_DONE)
            {
                NSLog(@"MESSAGE: Successful insert, %@, %d", [row objectAtIndex:0], sqlite3_step(sqlStatement));
            } else {
                NSLog(@"MESSAGE: Failed insert, %s", sqlite3_errmsg(db));
            }
        }

「挿入に成功しました」というメッセージが表示されますが、データベースにデータがありません。何が起きているのか分かりますか?SQLiteを使用するのはこれが初めてです。

編集#1:

また、次の構文を試しました。

            sql = "INSERT INTO roomData VALUES (?)";
        sqlite3_prepare(db, sql, -1, &sqlStatement, NULL);
        sqlite3_bind_int(sqlStatement, 1, 2);
        if(sqlite3_step(sqlStatement)) { NSLog(@"DONE!"); } else { NSLog(@"FAIL: %s",sqlite3_errmsg(db)); }

「DONE!」が表示されますが、データベースはまだ空です。

編集#2:

私はもともと、アプリケーションバンドルに保存されていたデータベースを変更しようとしていました。間違いですよね?そこで、データベースをLibraryディレクトリにコピーし、代わりにそのコピーを使用するスクリプトをインストールしました。ただし、スクリプトはデータベースにレコードを挿入しません。ここで何が欠けていますか?

4

1 に答える 1

0

私はなんとかこの問題を解決することができました。元々の問題は、データベースファイルがライブラリフォルダになければならないということでした。それを解決した後、私のsqlステートメントが正しい数のフィールドを適切に挿入していなかったため、それは機能していませんでした。私の声明を訂正した後、プロセスは見事に機能しました。エラーが発生しなかった理由がわかりません。

于 2013-01-04T19:13:41.973 に答える