簡體   English   中英

根據android studio編譯器,數據庫表不存在

[英]Database table doesn't exist according to android studio compiler

我收到此錯誤:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM