0

私のアプリケーションは単純なテーブルを作成できません。以下のコードをご覧ください。

DatabaseHandler.java

public class DatabaseHandler extends SQLiteOpenHelper {

private static final int DB_VERSION = 1;
private static final String DB_NAME = "PASSENGER_INFO_DB";
private static final String TABLE_NAME = "PASSENGER_INFO";
private static final String TABLE_COLUMN_SEAT_NO = "SEAT_NO";
private static final String TABLE_COLUMN_NAME = "NAME";
private static final String TABLE_COLUMN_AGE = "AGE";
private static final String TABLE_COLUMN_GENDER = "GENDER";
private static final String TABLE_COLUMN_FOOD_PREF = "FOOD_PREF";

private static final String CREATE_PASSENGER_INFO_TABLE = "CREATE TABLE IF NOT EXISTS "
        + TABLE_NAME + " ( " + TABLE_COLUMN_SEAT_NO
        + " TEXT PRIMARY KEY, " + TABLE_COLUMN_NAME + " TEXT, "
        + TABLE_COLUMN_AGE + " INTEGER, " + TABLE_COLUMN_GENDER
        + " INTEGER, " + TABLE_COLUMN_FOOD_PREF + " TEXT" + ")";

public DatabaseHandler(Context context) {
    super(context, DB_NAME, null, DB_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(CREATE_PASSENGER_INFO_TABLE);
}
public void addPassengerInfo(PassengerInfo passInfo) {
    SQLiteDatabase addPass = this.getWritableDatabase();

    ContentValues values = new ContentValues();

    values.put(TABLE_COLUMN_SEAT_NO, passInfo.getM_seatNo());
    values.put(TABLE_COLUMN_NAME, passInfo.getM_name());
    values.put(TABLE_COLUMN_AGE, passInfo.getM_age());
    values.put(TABLE_COLUMN_GENDER, passInfo.getM_gender());
    values.put(TABLE_COLUMN_FOOD_PREF, passInfo.getM_foodPref());

    addPass.insert(TABLE_NAME, null, values);
    addPass.close();
}

MainActivity.javaで

DatabaseHandler dbhandler = new DatabaseHandler(this);
addSeat = "1A";
passName = "NA";
passAge = 0;
passGender = -1;
passFoodPref = "NA";
dbhandler.addPassengerInfo(new PassengerInfo(addSeat, passName, passAge, passGender, passFoodPref));

(PassengerInfo.classには、フィールド用のgetterメソッドとsetterメソッドがあります)

これを実行すると、logcatで次のエラーが発生します。

01-23 19:09:18.311: I/Database(1303): sqlite returned: error code = 1, msg = table PASSENGER_INFO has no column named SEAT_NO
01-23 19:09:18.370: E/Database(1303): Error inserting FOOD_PREF=NA NAME=NA AGE=0 GENDER=-1 SEAT_NO=1A

また、adbシェルを介してデータベースに作成されたテーブルを確認しました。PASSENGER_INFOという名前のテーブルはありません。助けてください !

4

4 に答える 4

0

作成テーブルについにセミコンがありません

+ " TEXT" + ");";
于 2013-01-23T13:55:00.723 に答える
0

「);」の後のセミコロン およびのクエリがありません。Psデータベースにデータを挿入する方法は、Contentvaluesを使用することをお勧めしません。

     ContentValues row = new ContentValues();
     row.put("SEAT_NO",tid);
     row.put("NAME", sid);
     row.put("AGE", rsubject);
     row.put("GENDER",rdescr);
     row.put("FOOD_PREF", day);


     long chk = db.insert("PASSENGER_INFO",null, row);

さらに、適切なクエリは次のようになります

  db.execSQL(" CREATE TABLE " + DATABASE_MARKSTABLE + " (" +
                "SEAT_NO" + " TEXT PRIMARY KEY, " +
                "NAME" + " TEXT NOT NULL, " +
                "AGE" + " INTEGER NOT NULL, " +
                "GENDER" + " INTEGER NOT NULL, " +
                "FOOD_PREF" + " TEXT);"
        );
于 2013-01-23T14:06:57.580 に答える
0

後で列を追加せずにテーブル()を作成したと仮定します。あなたがする必要があるのは、をインクリメントしてアプリケーションを再実行することです。DatabaseHandlerが実行される原因は何ですか。そのコードは表示しませんでしたが、うまくいけば、テーブルを削除してから、テーブルを再作成するために呼び出します(現在は列を使用しています)。PASSENGER_INFOSEAT_NODB_VERSIONonUpdate()onCreate()SEAT_NO

補足:そのテーブルの主キーを、_id1フライト分の座席しか保存できないように変更します...もちろん、デザインはあなた次第です。

于 2013-01-23T17:52:31.150 に答える
0

データベース数を増やしてみましたか?また、この行を変更してみてください

+ TABLE_COLUMN_SEAT_NO
    + " TEXT PRIMARY KEY, "

+ TABLE_COLUMN_SEAT_NO
    + " TEXT, "

rowIdを表す別の列を追加し、データベースのバージョン番号を更新して再実行します。

于 2013-01-23T17:58:03.637 に答える