如何解决如何在 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 举报,一经查实,本站将立刻删除。