2

私は SQLite データベースをセットアップしており、ほとんどのものを想定どおりにセットアップしています。主なエラーは、列が本来あるべき場所にないことに関係しています。次のように、データベースの列名を文字列で初期化しました。

public static final String KEY_ROWID = "_id";
public static final String KEY_SPORT = "given_sport";
public static final String KEY_NAME = "given_name";
public static final String KEY_DATE = "given_date";
public static final String KEY_TIME = "given_time";
public static final String KEY_PERIOD = "given_period";
public static final String KEY_LOCATION = "given_location";

列名を持つテーブルを作成するときが来ました:

db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + 
                KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
                KEY_SPORT + " TEXT NOT NULL, " + 
                KEY_NAME + " TEXT NOT NULL, " + 
                KEY_DATE + " TEXT NOT NULL, " + 
                KEY_TIME + " TEXT NOT NULL, " + 
                KEY_PERIOD + " TEXT NOT NULL, " + 
                KEY_LOCATION + "TEXT NOT NULL);"
);

問題は、次のエラーが発生することです。

05-27 04:13:01.448: E/Database(273): android.database.sqlite.SQLiteException: table groupTable has no column named given_location: , while compiling: INSERT INTO groupTable(given_location, given_time, given_date, given_period, given_sport, given_name) VALUES(?, ?, ?, ?, ?, ?);

テーブル名が並べ替えられているようで、それが挿入エラーの原因です。私は無知ですが、これについて何か助けていただければ幸いです。

編集:ここにINSERTコマンドがあります

    ContentValues cv = new ContentValues();
    cv.put(KEY_SPORT, sportInput);
    cv.put(KEY_NAME, nameInput);
    cv.put(KEY_DATE, dateInput);
    cv.put(KEY_TIME, timeInput);
    cv.put(KEY_PERIOD, periodInput);
    cv.put(KEY_LOCATION, locationInput);
    return dbSQL.insert(DATABASE_TABLE, null, cv);
4

2 に答える 2

2

問題はおそらく、データベースのバージョンではなく、データベース構造を変更したことです。初めて理解するのに多くの時間を費やさなければならなかったのは奇妙な問題です。

DatabaseHelper クラスにはバージョン番号が必要です。テーブル スキーマなどを変更するたびに、バージョン番号を 1 ずつ増やしてください。

編集

SQL テーブルの作成で「TEXT」の前にスペースがありません。

そのはず:

... + KEY_LOCATION+ "テキスト" ...

それを修正したら、バージョン番号を再度増やします。

于 2012-05-27T04:27:52.420 に答える
1

テーブル列の順序によって「列なし」エラーが発生することはありません。アプリを少なくとも 1 回実行した後にテーブルに列を追加したが、データベース バージョンをインクリメントしていない場合、これがこのエラーの原因の 1 つです。

これらの列の順序:

INSERT INTO groupTable(given_location, given_time, given_date, given_period, given_sport, given_name) ...

ステートメントを記述するときの列の順序に依存します。コマンドINSERTに基づく固定の順序ではありません。CREATE

于 2012-05-27T04:21:11.530 に答える