我的应用程序无法创建简单的表。请参阅以下代码,
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 shell检查了数据库中创建的表,没有名称为PASSENGER_INFO的表。 请帮忙!
答案 0 :(得分:0)
您在创建表
中最后遗漏了一个半字节+ " TEXT" + ");";
答案 1 :(得分:0)
“)之后的分号;”在查询和查询丢失。 P.s鼓励您将数据插入数据库的方式应该使用 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);"
);
答案 2 :(得分:0)
我假设您创建的表格(PASSENGER_INFO
)没有SEAT_NO
列,以后再添加它。你需要做的是增加DB_VERSION
并重新运行应用程序。什么会导致DatabaseHandler的onUpdate()
运行。您没有显示该代码,但希望它会删除该表,然后调用onCreate()
重新创建表(现在使用SEAT_NO
列)。
旁注:我会将该表的主键更改为_id
,就像你拥有它一样,你只能存储一个航班的座位......当然,设计是由你。