2017-05-27 13 views
2

によると、私はこのエラーを受けていますが存在しません:データベースのテーブルは、Android Studioコンパイラ

android.database.sqlite.SQLiteException: no such table: setting (code 1): , while compiling: 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) }); 
    } 

、エラーがそれ自体を繰り返しているにもかかわらず、「存在しない場合は作成する」メソッドがあり、作成しようとしています。

hereが表示されているフラグメントでこのデータベースコードを実行しようとしていますが、これまでのところ問題ではないようですが、主にDatabaseHandlerだと思います。

テーブルSETTINGを正しく作成するには、どうすれば選択できますか?

+0

は手動でアプリをアンインストールして、私が求めることができる場合..私はそれはそれだったと思い@Pavneet_Singh –

+0

を試しに実行するために携帯電話からアプリをアンインストールし、理由ということです? –

答えて

1

アプリが既にインストールされている間は、データベース構造を変更しましたが、あなたは、あなたの変更がデータベース

1に反映させるための2つのオプションを持っているので、onCreateは一度だけ実行されます)onUpgradeを実行するために1で、データベースのバージョンをインクリメント既存のデータベースに変更を適用すること

2.

)を手動 onCreate

関連する問題