我正在使用SQLite数据库来保存锻炼信息。在我进行更新后,我的数据库停止工作,我无法再从数据库中查看任何已保存的数据。在尝试修复它一段时间后,我恢复到旧的提交,然后对数据库进行了任何更改并清除了应用程序中的数据和缓存,并在我的设备上运行旧版本,但现在甚至是那个旧版本 - 我知道它已经工作了之前很好 - 无法将任何数据库保存到手机中。不确定问题可能是什么,但我将不胜感激。
来自我的数据库的代码:
public class WorkoutDBHandler extends SQLiteOpenHelper{
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "workouts2.db";
public static final String TABLE_WORKOUTS = "workouts2";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_DATE = "date";
public static final String COLUMN_WORKOUTNAME = "name";
public static final String COLUMN_EXERCISENAMES = "exercises";
public WorkoutDBHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, DATABASE_NAME, factory, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String query = " CREATE TABLE " + TABLE_WORKOUTS + " ( " +
COLUMN_ID + " INTEGER PRIMARY KEY," +
COLUMN_WORKOUTNAME + " TEXT," +
COLUMN_DATE + "INTEGER" +
COLUMN_EXERCISENAMES + " TEXT " +
");";
db.execSQL(query);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP_TABLE_IF_EXISTS " + TABLE_WORKOUTS);
onCreate(db);
}
//Add a new workout to the database
public void addWorkout(Workout workout){
ContentValues values = new ContentValues();
values.put(COLUMN_WORKOUTNAME,workout.getName());
values.put(COLUMN_EXERCISENAMES,workout.exerciseNamesToString());
values.put(COLUMN_DATE,workout.getDate().getTime());
SQLiteDatabase db = getWritableDatabase();
db.insert(TABLE_WORKOUTS, null, values);
db.close();
}
//Removes a workout with the name workoutName from the database
public void deleteWorkout(String workoutName){
SQLiteDatabase db = getWritableDatabase();
db.execSQL("DELETE FROM " + TABLE_WORKOUTS + " WHERE " + COLUMN_WORKOUTNAME + "='" + workoutName + "';");
db.close();
}
//Returns a list of the users workouts that are stored in the database
public ArrayList<Workout> getWorkouts(){
ArrayList<Workout> workoutList = new ArrayList<>();
SQLiteDatabase db = getWritableDatabase();
String query = "SELECT * FROM " + TABLE_WORKOUTS + " WHERE 1";
Cursor c = db.rawQuery(query, null);
c.moveToFirst();
while(!c.isAfterLast()){
if(c.getString(c.getColumnIndex(COLUMN_WORKOUTNAME))!=null){
String workoutName = c.getString(c.getColumnIndex(COLUMN_WORKOUTNAME));
String exerciseNames = c.getString(c.getColumnIndex(COLUMN_EXERCISENAMES));
Date workoutDate = new Date(c.getLong(c.getColumnIndex(COLUMN_DATE)));
ArrayList<String> list = new ArrayList<String>(Arrays.asList(exerciseNames.split(",")));
workoutList.add(new Workout(workoutName, workoutDate, list));
}
c.moveToNext();
}
db.close();
return workoutList;
}
//Returns the number of rows in the exercise table
public int numWorkouts(){
String countQuery = "SELECT * FROM " + TABLE_WORKOUTS;
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.rawQuery(countQuery, null);
int count = cursor.getCount();
cursor.close();
return count;
}
}
答案 0 :(得分:2)
onCreate
方法
更具体地说,这一行:
COLUMN_DATE + "INTEGER" +
应该是:
COLUMN_DATE + " INTEGER, " +
注意INTEGER
之前的空格和之后的逗号,
。
修改强> 您必须再次卸载并重新安装该应用才能使更改生效。