我正在开发一个健身追踪器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();
}
}
);
}
现在这里是'权重'java类,我在其中调用将数据保存到权重表的方法。正如您所看到的,如果成功插入数据,我已设置了一个Toast消息。每当我点击在我的应用程序中保存锻炼时,toast消息告诉我锻炼已成功保存,但是当我检查数据库中的权重表时,没有保存任何值。
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工作室中使用Android设备监视器将数据库从android模拟器的存储器拉到我的电脑上。然后我使用SQLite Manager firefox addon来检查2个表。答案 0 :(得分:1)
您的表中没有SETS
列,但您正在尝试向其中插入数据。那不行。
将SETS
列添加到CREATE TABLE
后,您可以卸载应用以强制onCreate()
再次执行。