これは私がここで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";
あなたは、たとえば、データベースにいくつかの変更を加えた場合、あまりにも.... – Opiatefuchs
をRESULTS_COLUMN_DATEを投稿してください。日付列を追加し、データベースを削除してから、アプリケーションを再度コンパイルしてください。 – Opiatefuchs
プライベート静的最終文字列RESULTS_COLUMN_DATE = "日付"; –