我收到此错误:
android.database.sqlite.SQLiteException:否这样的表:设置(代码1):,而编译时:SELECT * FROM设置
但是我已经在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) }); }
如您所见,虽然错误是重复发生的,但有一种“创建不存在的创建”方法,尽管此错误在我身上,但我正在尝试创建。
我正在尝试在一个片段中执行此数据库代码,您可以在此处看到它,到目前为止,似乎不是问题,我认为主要是DatabaseHandler。
如何SETTING正确创建表格,以便可以从中进行选择?
SETTING
您已经在安装应用程序时更改了数据库结构,但是onCreate仅执行一次,因此您有两个选择可以使更改反映到数据库中
onCreate
1.)将数据库版本递增一以执行onUpgrade以将更改应用于现有数据库
onUpgrade
2.)从手机上手动卸载该应用以执行 onCreate