根据android studio编译器,数据库表不存在

我收到此错误:

android.database.sqlite.SQLiteException:没有这样的表:设置(代码1):,同时编译:SELECT * FROM setting

但我在DatabaseHandler文件中创建了表:

public class DatabaseHandler extends SQLiteOpenHelper { // Database Version private static final int DATABASE_VERSION = 1; // Database Name private static final String DATABASE_NAME = "database.db"; //table name private static final String TABLE_DETAILS = "details"; private static final String TABLE_FOOD = "food"; private static final String TABLE_OLDDETAILS = "oldDetails"; private static final String TABLE_SETTING = "setting"; //Table Columns names private static final String KEY_ID = "id"; private static final String KEY_NAME = "name"; private static final String KEY_HEIGHT = "height"; private static final String KEY_WEIGHT = "weight"; private static final String KEY_CALORIES = "calories"; private static final String KEY_DATE = "date"; private static final String KEY_LEVEL = "level"; private static final String KEY_DURATION = "duration"; private static final String KEY_DAYS = "days"; public DatabaseHandler(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } // Creating Tables @Override public void onCreate(SQLiteDatabase db) { String CREATE_DETAILS_TABLE = "CREATE TABLE IF NOT EXISTS " + TABLE_DETAILS + "(" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_HEIGHT + " REAL," + KEY_WEIGHT + " REAL " + ")"; String CREATE_FOOD_TABLE = "CREATE TABLE IF NOT EXISTS " + TABLE_FOOD + "(" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT," + KEY_CALORIES + " INTEGER " + ")"; String CREATE_OLDDETAILS_TABLE = "CREATE TABLE IF NOT EXISTS " + TABLE_OLDDETAILS + "(" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_DATE + " TEXT," + KEY_HEIGHT + " REAL," + KEY_WEIGHT + " REAL " + ")"; String CREATE_SETTING_TABLE = "CREATE TABLE IF NOT EXISTS " + TABLE_SETTING + "(" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_LEVEL + " INTEGER," + KEY_DURATION + " INTEGER," + KEY_DAYS + " INTEGER " + ")"; db.execSQL(CREATE_OLDDETAILS_TABLE); db.execSQL(CREATE_DETAILS_TABLE); db.execSQL(CREATE_FOOD_TABLE); db.execSQL(CREATE_SETTING_TABLE); } // Upgrading database @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // Drop older table if existed db.execSQL("DROP TABLE IF EXISTS " + TABLE_DETAILS); db.execSQL("DROP TABLE IF EXISTS " + TABLE_OLDDETAILS); db.execSQL("DROP TABLE IF EXISTS " + TABLE_FOOD); db.execSQL("DROP TABLE IF EXISTS " + TABLE_SETTING); // Create tables again onCreate(db); } public boolean addSetting(int level, int duration, int days) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(KEY_ID, 1); values.put(KEY_LEVEL, level); values.put(KEY_DURATION, duration); values.put(KEY_DAYS, days); // Inserting Row long result = db.insert(TABLE_SETTING, null, values); if(result == -1){ return false; } else{ return true; } } public boolean checkSetting(){ SQLiteDatabase db = this.getWritableDatabase(); String selectQuery = "SELECT * FROM " + TABLE_SETTING; Cursor cursor = db.rawQuery(selectQuery, null); Boolean rowExists; if (cursor.moveToFirst()) { // DO SOMETHING WITH CURSOR rowExists = true; } else { // I AM EMPTY rowExists = false; } return rowExists; } public setting getSetting() { String selectQuery = "SELECT * FROM " + TABLE_SETTING; SQLiteDatabase db = this.getWritableDatabase(); Cursor cursor = db.rawQuery(selectQuery, null); if (cursor != null) cursor.moveToFirst(); setting set = new setting(cursor.getInt(1), cursor.getInt(2), cursor.getInt(3)); return set; } public int updateSetting(setting set) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(KEY_LEVEL, set.getLevel()); values.put(KEY_DURATION, set.getDuration()); values.put(KEY_DAYS, set.getDays()); Log.d("UPDATE: ", "updated all"); // updating row return db.update(TABLE_SETTING, values, KEY_ID + " = ?", new String[] { String.valueOf(1) }); } 

正如您所看到的,有“CREATE IF NOT EXISTS”方法,我正在尝试创建它,尽管错误正在重复。

我试图在一个片段中执行这个数据库代码,你可以在这里看到,到目前为止它似乎不是问题,我认为它主要是DatabaseHandler。

如何正确创建表格SETTING ,以便我可以从中进行选择?

您已安装应用程序时更改了数据库结构,但onCreate只会执行一次,因此您有两个选项可以将更改反映到数据库中

1.)将数据库版本递增1以执行onUpgrade以将更改应用于现有数据库

2.)从手机中手动卸载应用程序以执行onCreate