混淆光标索引超出范围异常

时间:2014-04-15 11:45:33

标签: java android database sqlite cursor

我有一个包含游戏级别和阶段的数据库,问题是我每次在代码中调用方法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))

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

在使用之前,您必须首先设置Cursor参考的位置,使用moveToFirsrt(), moveToLast()等。

答案 1 :(得分:0)

问题有点不清楚,但我认为您的意思是SELECT *不会返回您onCreate()中的所有列。

您已更新SCHEMA_VERSION,但您的onUpgrade()为空。因此,数据库实际上并未实际更新,但框架认为是onUpgrade()成功返回后。

清理您的应用数据或将其卸载以删除旧的数据库文件。然后,当再次运行应用程序时,数据库帮助程序onCreate()会正确地重新创建它。