我有一个包含游戏级别和阶段的数据库,问题是我每次在代码中调用方法getId()
,getLevel()
或getStage()
时,它只会抛出{{ 1}}。我有5个数据库索引,但它告诉我只有0个索引可用。这是代码:
数据库帮助程序类:
CursorIndexOutOfBoundsException
主要课程。访问public class DatabaseGame extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "DB2.db";
private static final int SCHEMA_VERSION = 6;
public DatabaseGame(Context context) {
super(context, DATABASE_NAME, null, SCHEMA_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE save_progress (ID INTEGER PRIMARY KEY NOT NULL, LEVEL VARCHAR(3), STAGE1 VARCHAR(3), STAGE2 VARCHAR(3), STAGE3 VARCHAR(3));");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
public void insert(String level, String stage1, String stage2, String stage3) {
ContentValues carry = new ContentValues();
carry.put("ID", 1);
carry.put("LEVEL", level);
carry.put("STAGE1", stage1);
carry.put("STAGE2", stage2);
carry.put("STAGE3", stage3);
getWritableDatabase().insert("save_progress", null, carry);
}
public void update(int id, String level, String stage1, String stage2,
String stage3) {
getWritableDatabase().execSQL(
"UPDATE save_progress SET LEVEL = '" + level + "', STAGE1 = '"
+ stage1 + "', STAGE2 = '" + stage2 + "', STAGE3 = '"
+ stage3 + "' WHERE ID = " + id + ";");
}
public Cursor getAll() {
return (getReadableDatabase().rawQuery("SELECT * FROM save_progress",
null));
}
public String getId(Cursor c) {
return (c.getString(0));
}
public String getLevel(Cursor c) {
return (c.getString(1));
}
public String getStage(Cursor c, int level) {
return (c.getString(level + 1));
}
}
时出现错误:
Integer.parseInt(db.getLevel(select))
感谢您的帮助。
答案 0 :(得分:2)
在使用之前,您必须首先设置Cursor
参考的位置,使用moveToFirsrt(), moveToLast()
等。
答案 1 :(得分:0)
问题有点不清楚,但我认为您的意思是SELECT *
不会返回您onCreate()
中的所有列。
您已更新SCHEMA_VERSION
,但您的onUpgrade()
为空。因此,数据库实际上并未实际更新,但框架认为是onUpgrade()
成功返回后。
清理您的应用数据或将其卸载以删除旧的数据库文件。然后,当再次运行应用程序时,数据库帮助程序onCreate()
会正确地重新创建它。