【问题标题】:Model object is not matching with the database result模型对象与数据库结果不匹配
【发布时间】:2020-06-28 09:20:44
【问题描述】:

记录迭代后,列表键值不匹配/错误显示!可能是什么原因。

数据库like this中的正确数据被保存(正确)

Problem: You can see in this screenshot link, record is a mismatch with columns, e.g the key dayName has wrong value showing , key MenuIcon value is shown on dayName key

sql lite DAO

    /*
* Get the all the exercises by ID asecending order
 */
public LinkedList<ExerciseDetails> getAllExerciseInfo() {
    LinkedList<ExerciseDetails> listCompanies = new LinkedList<ExerciseDetails>();
    Cursor cursor = mDatabase.query(DBHelper.TABLE_EXERCISE_DETAILS, mAllColumns,
            "",
            new String[]{}, "order_id", null, "order_id ASC");
    if (cursor != null) {
        cursor.moveToFirst();
        while (!cursor.isAfterLast()) {
            ExerciseDetails company = cursorToExerciseDetails(cursor);
            listCompanies.add(company);
            cursor.moveToNext();
        }
        // make sure to close the cursor
        cursor.close();
    }
    return listCompanies;
}

用于插入、创建表、列出对象的 DAO 完整代码。请让我知道您想看的任何代码,我会发布

public class ExercisesDAO {

    public static final String TAG = "ExercisesDAO";

    // Database fields
    private SQLiteDatabase mDatabase;
    private DBHelper mDbHelper;
    private Context mContext;
    private String[] mAllColumns = {DBHelper.COLUMN_EX_DETAILS_ID,
            DBHelper.COLUMN_ROUTINE_ID,
            DBHelper.COLUMN_DAY_ID,
            DBHelper.COLUMN_EXERCISE_ID,
            DBHelper.COLUMN_REPS,
            DBHelper.COLUMN_SETS,
            DBHelper.COLUMN_TIME_PERSET,
            DBHelper.COLUMN_CALORIE_BURN,
            DBHelper.COLUMN_RESTTIME_PERSET,
            DBHelper.COLUMN_RESTTIME_POST_SET,
            DBHelper.COLUMN_ORDER_ID,
            DBHelper.COLUMN_EXERCISE_NAME,
            DBHelper.COLUMN_TIPS,
            DBHelper.COLUMN_YOUTUBE_URL,
            DBHelper.COLUMN_WARNINGS,
            DBHelper.COLUMN_DISPLAY_ID,
            DBHelper.COLUMN_VISIBILITY,
            DBHelper.COLUMN_FOR_DATE,
            DBHelper.COLUMN_GIF,
            DBHelper.COLUMN_DAYNAME
    };

    public ExercisesDAO(Context context) {
        this.mContext = context;
        mDbHelper = new DBHelper(context);
        // open the database
        try {
            open();
        } catch (SQLException e) {
            Log.e(TAG, "SQLException on openning database " + e.getMessage());
            e.printStackTrace();
        }
    }

    public void open() throws SQLException {
        mDatabase = mDbHelper.getWritableDatabase();
    }

    public void close() {
        mDbHelper.close();
    }

    public ExerciseDetails createExerciseDetail(String routineId,String dayId,
           String exerciseId, String reps,String sets, String timePerset,
           String calorieBurn, String resttimePerset, String resttimeAfterex,String order,
           String menuName, String tips, String youtubeUrl, String warnings, String displayId,
           String visibility, String forDate, String menuIcon, String dayName) {

        ExerciseDetails newCompany = null;
        try {
            ContentValues values = new ContentValues();
            values.put(DBHelper.COLUMN_ROUTINE_ID, routineId);
            values.put(DBHelper.COLUMN_DAY_ID, dayId);
            values.put(DBHelper.COLUMN_EXERCISE_ID, exerciseId);
            values.put(DBHelper.COLUMN_REPS, reps);
            values.put(DBHelper.COLUMN_SETS, sets);
            values.put(DBHelper.COLUMN_TIME_PERSET, timePerset);
            values.put(DBHelper.COLUMN_CALORIE_BURN, calorieBurn);
            values.put(DBHelper.COLUMN_RESTTIME_PERSET, resttimePerset);
            values.put(DBHelper.COLUMN_RESTTIME_POST_SET, resttimeAfterex);
            values.put(DBHelper.COLUMN_ORDER_ID, order);
            values.put(DBHelper.COLUMN_EXERCISE_NAME, menuName);
            values.put(DBHelper.COLUMN_TIPS, tips);
            values.put(DBHelper.COLUMN_YOUTUBE_URL, youtubeUrl);
            values.put(DBHelper.COLUMN_WARNINGS, warnings);
            values.put(DBHelper.COLUMN_DISPLAY_ID, displayId);
            values.put(DBHelper.COLUMN_VISIBILITY, visibility);
            values.put(DBHelper.COLUMN_FOR_DATE, forDate);
            values.put(DBHelper.COLUMN_GIF, menuIcon);
            values.put(DBHelper.COLUMN_DAYNAME, dayName);

            long insertId = mDatabase
                    .insert(DBHelper.TABLE_EXERCISE_DETAILS, null, values);
            Cursor cursor = mDatabase.query(DBHelper.TABLE_EXERCISE_DETAILS, mAllColumns,
                    DBHelper.COLUMN_EX_DETAILS_ID + " = " + insertId, null, null,
                    null, null);
            cursor.moveToFirst();
            newCompany = cursorToExerciseDetails(cursor);
            cursor.close();

        } catch (Exception e) {
            Log.e("exception", "exception in CreateFollowing class - " + e);
        }
        return newCompany;
    }


    public void executeSqlOnExerciseDetail(String sql) {
        mDatabase.execSQL(sql);
    }

    public Long getTotalCountExerciseDetail() {
        return DatabaseUtils.queryNumEntries(mDatabase, DBHelper.TABLE_EXERCISE_DETAILS);
    }

    /*
    * Get the all the exercises by ID asecending order
     */
    public LinkedList<ExerciseDetails> getAllExerciseInfo() {
        LinkedList<ExerciseDetails> listCompanies = new LinkedList<ExerciseDetails>();
        Cursor cursor = mDatabase.query(DBHelper.TABLE_EXERCISE_DETAILS, mAllColumns,
                "",
                new String[]{}, "order_id", null, "order_id ASC");
        if (cursor != null) {
            cursor.moveToFirst();
            while (!cursor.isAfterLast()) {
                ExerciseDetails company = cursorToExerciseDetails(cursor);
                listCompanies.add(company);
                cursor.moveToNext();
            }
            // make sure to close the cursor
            cursor.close();
        }
        return listCompanies;
    }


    /*
      * Check whether the exercise data present or not in the db before executing statement
     */
    public  boolean CheckIfRecordExists(String rid, String did) {

        String Query = "Select * from " + DBHelper.TABLE_EXERCISE_DETAILS + " where " + DBHelper.COLUMN_ROUTINE_ID + " = " + rid +  " AND " + DBHelper.COLUMN_DAY_ID + " = " + did;
        Cursor cursor = mDatabase.rawQuery(Query, null);
        if(cursor.getCount() <= 0){
            cursor.close();
            return false;
        }
        cursor.close();
        return true;
    }


    protected ExerciseDetails cursorToExerciseDetails(Cursor cursor) {
        try{
        ExerciseDetails exerciseDetails = new ExerciseDetails();

        exerciseDetails.setExDetailsId(cursor.getLong(0));
        exerciseDetails.setRoutineId(cursor.getString(1));
        exerciseDetails.setDayId(cursor.getString(2));
        exerciseDetails.setExerciseId(cursor.getString(3));
        exerciseDetails.setReps(cursor.getString(4));
        exerciseDetails.setSets(cursor.getString(5));
        exerciseDetails.setTimePerset(cursor.getString(6));
        exerciseDetails.setCalorieBurn(cursor.getString(7));
        exerciseDetails.setResttimePerset(cursor.getString(8));
        exerciseDetails.setOrder(cursor.getString(9));
        exerciseDetails.setMenuName(cursor.getString(10));
        exerciseDetails.setTips(cursor.getString(11));
        exerciseDetails.setYoutubeUrl(cursor.getString(12));
        exerciseDetails.setWarnings(cursor.getString(13));
        exerciseDetails.setDisplayId(cursor.getString(14));
        exerciseDetails.setVisibility(cursor.getString(15));
        exerciseDetails.setForDate(cursor.getString(16));
        exerciseDetails.setMenuIcon(cursor.getString(17));
        exerciseDetails.setDayName(cursor.getString(18));
        return exerciseDetails;

        } catch (Exception e){
            System.out.println("error------------"+e);
            return  null;
        }
    }

}

我插入 sqllite 的完整 json 值 https://pastebin.com/DmAkPkXg

【问题讨论】:

    标签: android sqlite android-sqlite


    【解决方案1】:

    cursorToExerciseDetails() 中而不是显式设置列的索引:

    exerciseDetails.setExDetailsId(cursor.getLong(0));
    exerciseDetails.setRoutineId(cursor.getString(1));
    ....................................................
    

    使用getColumnIndex() 和列名返回索引:

    exerciseDetails.setExDetailsId(cursor.getLong(cursor.getColumnIndex(DBHelper.COLUMN_EX_DETAILS_ID)));
    exerciseDetails.setRoutineId(cursor.getString(cursor.getColumnIndex(DBHelper.COLUMN_ROUTINE_ID))));
    ....................................................
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-07
      • 1970-01-01
      • 2023-03-19
      • 2020-04-29
      • 1970-01-01
      • 2021-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多