无法在Android应用中显示SQLite数据

时间:2017-03-31 16:28:47

标签: java android sqlite android-sqlite

我正在创建一个健身应用,其中用户输入锻炼数据并将其保存到SQLite数据库中的2个表中(TABLE_CARDIO& TABLE_WEIGHTS)。以下是这两个表格的结构:

 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";

我已经使用了SQLite Manager' firefox添加,在其中我能够看到数据已成功保存到两个表。现在我需要检索数据并在单击按钮时在我的应用程序中显示它。所以我在下面的方法中使用查询来从两个表中获取所有已保存的数据:

 public Cursor getWorkoutData() {
    SQLiteDatabase db = this.getWritableDatabase();
    String query = "SELECT * FROM " + TABLE_CARDIO + " CROSS JOIN " + TABLE_WEIGHTS + " ON " + TABLE_CARDIO + ".DATE = " + TABLE_WEIGHTS + ".DATE";
    Cursor result = db.rawQuery(query,null);
    return result;
}

然后我在另一个java类中使用以下方法,该类将返回从查询中找到的数据作为字符串值OR返回'错误:未找到任何训练'如果查询没有从我的数据库中找到任何结果:

public void viewWorkout() {
    btnShowWorkout.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Cursor result = myDb.getWorkoutData();
                    if (result.getCount() == 0) {
                        //show error
                        messageShow("Error","No workouts found");
                        return;
                    }

                    StringBuffer bfr = new StringBuffer();
                    while (result.moveToNext()) {
                        bfr.append("Id :"+ result.getString(0)+"\n");
                        bfr.append("Date :"+ result.getString(1)+"\n");
                        bfr.append("Time :"+ result.getString(2)+"\n\n");
                        bfr.append("Id :"+ result.getString(0)+"\n");
                        bfr.append("Date :"+ result.getString(1)+"\n");
                        bfr.append("Exercise :"+ result.getString(2)+"\n");
                        bfr.append("Weight :"+ result.getString(3)+"\n");
                        bfr.append("Reps :"+ result.getString(4)+"\n");
                        bfr.append("Sets :"+ result.getString(5)+"\n\n");
                    }

                    //show data
                    messageShow("Past Workouts",bfr.toString());
                }
            }
    );
}

我的问题是我的应用程序返回错误:未找到任何锻炼'即使我已经检查了我的数据库表并且两者都已填充。我的查询是否存在不允许我获取所有数据的问题?任何帮助非常感谢!

1 个答案:

答案 0 :(得分:0)

尝试使用.moveToFirst。如果它返回false,并且您确定数据库中有数据,并且已创建表,则查询出现问题。

if (!result.moveToFirst) {
                    //show error
                    messageShow("Error","No workouts found");
                    return;
                }