如何在 Android Studio 中正确使用 database.raw 查询?

问题描述

我一直在尝试制作一个锻炼应用程序,它将解析我创建的数据库并从我的数据表中提取特定值。我的表格包含经验值(初学者或经验丰富的)、设备(负重或无负重)和锻炼(例如:俯卧撑)。我想根据用户是否是初学者并想要重量或我可以使用这些参数的任何其他条件来获取锻炼。我制作了一个数据库助手并有使用 database.raw 查询代码,但是每次我尝试通过从练习数据表(我的数据表的名称)中选择设备和经验来进行查询时,它都会给我同样的错误。下面是eh数据库助手的代码和我引用的具体方法(getAllData)。错误显示为好。任何帮助都会很棒,谢谢


    public static final String TABLE_EXERCISES = "exercises";
    public static final String COLUMN_ID = "_id";
    public static final String COLUMN_EXPERIENCE = "experience";
    public static final String COLUMN_EQUIPMENT = "equipment";
    public static final String COLUMN_WORKOUT = "workout";
    public static final String DATABASE_NAME = "exercises.db";
    private static final int DATABASE_VERSION = 1;

    // Database creation sql statement


    public MysqLiteHelper(Context context) {
        super(context,DATABASE_NAME,null,DATABASE_VERSION);
    }

    @Override
    public void onCreate(sqliteDatabase database) {
        database.execsql("create table " + TABLE_EXERCISES +" (_id INTEGER PRIMARY KEY AUTOINCREMENT,experience TEXT,equipment TEXT,workout TEXT)");
    }

    @Override
    public void onUpgrade(sqliteDatabase db,int oldVersion,int newVersion) {
        Log.w(MysqLiteHelper.class.getName(),"Upgrading database from version " + oldVersion + " to "
                        + newVersion + ",which will destroy all old data");
        db.execsql("DROP TABLE IF EXISTS "+TABLE_EXERCISES);
        onCreate(db);
    }
    public boolean insertData(String experience,String equipment,String workout){
        sqliteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(COLUMN_EXPERIENCE,experience);
        contentValues.put(COLUMN_EQUIPMENT,equipment);
        contentValues.put(COLUMN_WORKOUT,workout);
        long result = db.insert(TABLE_EXERCISES,contentValues);
        if(result == -1)
            return false;
        else
            return true;
    }
    public Cursor getAllData(){
        sqliteDatabase db = this.getWritableDatabase();
        Cursor res = db.rawQuery("SELECT equipment,experience FROM exercises WHERE experience = ? AND equipment = ?",new String[] {"beginner","weights"});
        //Cursor res = db.rawQuery("select * from "  + TABLE_EXERCISES,null);
        if (res.movetoFirst()) {
            return res;
        }
       return null;
    }
}


----------
Error:

E/CursorWindow: Failed to read row 1,column 2 from a CursorWindow which has 140 rows,2 columns.
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.hfad.workoutmaker,PID: 32245
    java.lang.IllegalStateException: Couldn't read row 1,col 2 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.
        at android.database.CursorWindow.nativeGetString(Native Method)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)