2017-05-27 69 views
2

我收到此錯誤不存在數據庫表並根據機器人工作室編譯

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) }); 
    } 

正如你所看到的,有「創建如果不存在」的方法,我試圖創建它,雖然錯誤重演。

我想在一個片段中執行這個數據庫代碼,你可以看到here,到目前爲止它似乎不是問題,我認爲它主要是DatabaseHandler。

如何正確創建表SETTING以便我可以從中進行選擇?

+0

手動卸載應用程序,並嘗試 –

+0

@Pavneet_Singh我想這是它..如果我可能會問,這是什麼原因? –

回答

1

更改了數據庫結構,同時應用程序已經安裝,但onCreate將因此你有兩個選擇,使只能執行一次的變化反映到數據庫

1)一個單位的數據庫版本執行onUpgrade應用更改到現有的數據庫

2)手動從您的手機中卸載該應用程序來執行onCreate