我正在开发健身追踪器android应用程序,并成功设置了2个表的SQLite数据库。一张表用于保存有关有氧运动的数据,而一张表用于保存有关举重运动的数据。我可以将信息保存到有氧运动表(saved_workout_cardio)中,但是似乎无法将任何东西保存到举重表(saved_workout_weights)中。我首先对保存到“ saved_workout_cardio”表中的功能进行了编码,一旦成功完成工作,我就复制并粘贴了代码并对其进行了编辑,以适应保存到“ saved_workout_weights”表中所需的内容,但是不幸的是,并非如此工作,我对为什么感到困惑。
下面是我的databasehelper java类中的代码,在其中创建数据库以及2种方法,其中1种用于将数据保存到每个表中:
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "FitnessTracker.db";
public static final String TABLE_WEIGHTS = "saved_workout_weights";
public static final String COL_1 = "ID";
public static final String COL_2 = "DATE";
public static final String COL_3 = "EXERCISE";
public static final String COL_4 = "WEIGHT";
public static final String COL_5 = "REPS";
public static final String COL_6 = "SETS";
public static final String TABLE_CARDIO = "saved_workout_cardio";
public static final String COL_1a = "ID";
public static final String COL_2a = "DATE";
public static final String COL_3a = "TIME";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table " + TABLE_WEIGHTS + " (ID INTEGER PRIMARY KEY AUTOINCREMENT,DATE TEXT,EXERCISE TEXT,WEIGHT INTEGER,REPS INTEGER)");
db.execSQL("create table " + TABLE_CARDIO + " (ID INTEGER PRIMARY KEY AUTOINCREMENT,DATE TEXT,TIME INTEGER)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_WEIGHTS);
db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_CARDIO);
onCreate(db);
}
public boolean saveData (String date, String time) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL_2a, date);
contentValues.put(COL_3a, time);
long result = db.insert(TABLE_CARDIO, null, contentValues);
if(result == -1)
return false;
else
return true;
}
public boolean saveData2 (String date, String exercise, String weight, String reps, String sets) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues2 = new ContentValues();
contentValues2.put(COL_2, date);
contentValues2.put(COL_3, exercise);
contentValues2.put(COL_4, weight);
contentValues2.put(COL_5, reps);
contentValues2.put(COL_6, sets);
long result = db.insert(TABLE_WEIGHTS, null, contentValues2);
if(result == -1)
return false;
else
return true;
}
}
现在这是我的'Cardio'Java类中的相关代码,在这里我调用了将数据保存到有氧运动表的方法(此方法有效,并且能够成功将数据保存到有氧运动表:
public void saveCardioData () {
btnSaveCardio.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean isInserted = myDb.saveData(txtDate.getText().toString(),
txtTimer.getText().toString() );
if(isInserted = true)
Toast.makeText(Cardio.this, "Workout saved", Toast.LENGTH_LONG).show();
else
Toast.makeText(Cardio.this, "Error saving workout", Toast.LENGTH_LONG).show();
}
}
);
}
现在是“ weights” java类,在其中调用用于将数据保存到weights表的方法。如您所见,如果已成功插入数据,则我已设置一条举杯消息以显示。每当我单击将锻炼保存到我的应用程序中时,吐司消息都会告诉我锻炼已成功保存,但是当我检查数据库中的体重表时,没有保存任何值。
public void saveWeightsData () {
btnSaveWeights.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean isInserted = myDb.saveData2(exerciseVal.getText().toString(),
weightVal.getText().toString(),
repVal.getText().toString(),
setVal.getText().toString(),
dateVal.getText().toString() );
if(isInserted = true)
Toast.makeText(WeightsMain.this, "Workout saved", Toast.LENGTH_LONG).show();
else
Toast.makeText(WeightsMain.this, "Error saving workout", Toast.LENGTH_LONG).show();
}
}
);
}
真的很困惑为什么我遇到了这个问题,所以如果有人可以告诉我为什么会不胜感激! :)
编辑:我正在使用Android Studio中的Android设备监视器将数据库从android模拟器的存储中拉到我的PC。然后,我使用SQLite Manager firefox插件检查2个表。
最佳答案
表中没有SETS
列,但您正在尝试向其中插入数据。那行不通。
将SETS
列添加到CREATE TABLE
之后,可以卸载应用程序以强制onCreate()
重新执行。