2016-11-19 5 views
-1

これは私がここでSQLiteOpenHelperはIllegalArgumentExceptionを返します。列は存在しません。 Androidの

Caused by: java.lang.IllegalArgumentException: column 'date' does not exist 

を得るエラーは冗談私のコード

import java.util.ArrayList; 


class DBHelper extends SQLiteOpenHelper { 

    DBHelper(Context context) { 
     super(context, DATABASE_NAME , null, 1); 
    } 
    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(
       "create table " + RESULTS_TABLE_NAME + 
         " (" + RESULTS_COLUMN_ID + " integer primary key," + RESULTS_COLUMN_DATE + " text," + RESULTS_COLUMN_DURATION + " text," + RESULTS_COLUMN_DISTANCE + " text," + RESULTS_COLUMN_PACE + " text, " + RESULTS_COLUMN_CALORIES + " text)" 
     ); 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP TABLE IF EXISTS " + RESULTS_TABLE_NAME); 
     onCreate(db); 
    } 

    boolean insertLocation(String date, String duration, String distance, String pace, String calories) { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues contentValues = new ContentValues(); 
     contentValues.put(RESULTS_COLUMN_DATE, date); 
     contentValues.put(RESULTS_COLUMN_DURATION, duration); 
     contentValues.put(RESULTS_COLUMN_DISTANCE, distance); 
     contentValues.put(RESULTS_COLUMN_PACE, pace); 
     contentValues.put(RESULTS_COLUMN_CALORIES, calories); 
     db.insert(RESULTS_TABLE_NAME, null, contentValues); 
     return true; 
    } 

    ArrayList<MyLayoutObject> getAllResults() { 
     ArrayList<MyLayoutObject> array_list = new ArrayList<>(); 

     SQLiteDatabase db = this.getReadableDatabase(); 

     Cursor res = db.rawQuery("select * from " + RESULTS_TABLE_NAME, null); 
//  String[] columns = new String[]{ RESULTS_COLUMN_DATE, RESULTS_COLUMN_DISTANCE, RESULTS_COLUMN_DURATION, RESULTS_COLUMN_PACE, RESULTS_COLUMN_CALORIES}; 
//  Cursor res = db.query(DATABASE_NAME, columns, null, null, null, null, null); 
     res.moveToFirst(); 

     while(!res.isAfterLast()){ 
      array_list.add(new MyLayoutObject(
        res.getString(res.getColumnIndexOrThrow(RESULTS_COLUMN_DATE)), // This is throwing the error I mentioned 
        res.getString(res.getColumnIndexOrThrow(RESULTS_COLUMN_DURATION)), 
        res.getString(res.getColumnIndexOrThrow(RESULTS_COLUMN_DISTANCE)), 
        res.getString(res.getColumnIndexOrThrow(RESULTS_COLUMN_PACE)), 
        res.getString(res.getColumnIndexOrThrow(RESULTS_COLUMN_CALORIES)))); 
      res.moveToNext(); 
     } 
     res.close(); 
     return array_list; 
    } 

} 

//MyLayoutObject is just 5 strings in trenchcoat, acting like a real object. 

です、それは、それらを得るために何もメソッドを持つ5弦ません。

Endomondoのようなもので、実行時に結果を記録するアプリ向けです。このデータベースは、アプリをオフにした後でも、記録されたパフォーマンスを保持する必要があります。私はgetAllResults()メソッドを使用してListedViewを構築しますが、getAllResults()メソッドのためクラッシュします。トーストとSystem.out.println()は何も印刷しません。

編集:

private static final String RESULTS_COLUMN_DATE = "date"; 
+0

あなたは、たとえば、データベースにいくつかの変更を加えた場合、あまりにも.... – Opiatefuchs

+1

をRESULTS_COLUMN_DATEを投稿してください。日付列を追加し、データベースを削除してから、アプリケーションを再度コンパイルしてください。 – Opiatefuchs

+0

プライベート静的最終文字列RESULTS_COLUMN_DATE = "日付"; –

答えて

0

データベース名は/データベース 2.アプリをアンインストールして、もう一度再インストールのバージョンを増やし、このよう 1.変更を行うことができます。

0

を使用すると、別のDbの構造を持つ既存のDBがあなたのDBバージョンのアプリをununstalling試すか、変更していそうです

+0

ありがとう、それは助け! –

関連する問題