请求索引-1我正在试验Android中的SQLite数据库,我有一个简单但真正烦人的问题。我得到下面的异常而runnign我的代码:CursorIndexOutOfBoundsException:即使在使用moveToFirst()
android.database.CursorIndexOutOfBoundsException:指数-1要求,尺寸为1
正如你所看到的结果不是空的(大小为1),我还要调用result.moveToFirst()方法来正确放置游标,但问题仍然存在。我也尝试在return语句之前使用result.moveToPosition(0)方法,但没有成功。
下面的方法被包含在我的DatabaseHelper类中,并且它在带有return语句的行上引发异常。
public boolean authenticateUser(String username, String password) {
SQLiteDatabase db = this.getWritableDatabase();
Cursor result = db.rawQuery("SELECT PASSWORD FROM ACCOUNTS WHERE USERNAME = '" + username + "'", null);
//no such username in the database
if (!result.moveToFirst()) return false;
return result.getString(result.getColumnIndex("PASSWORD")).equals(password);
}
我具有其中用下面的命令创建的数据库中的一个表包括在所述DatabaseHelper类的onCreate方法:
db.execSQL("CREATE TABLE ACCOUNTS (USERNAME TEXT, PASSWORD TEXT, personID INTEGER)");
db.execSQL("INSERT INTO ACCOUNTS VALUES('user1', 'user1', 1)");
db.execSQL("INSERT INTO ACCOUNTS VALUES('user2', 'user2', 2)");
我已验证数据库得到正确创建,且数据插入。
在我的MainActivity中,我有一个DatabaseHelper myDB变量。
myDB = new DatabaseHelper(this);
而且在某一点上我调用该方法
myDB.authenticateUser("user1", "user1");
i认为getColumnIndex()区分大小写。检查数据库中列密码的名称。是大写还是小写? – seba123neo
这是ACCOUNTS表的创建字符串,所有内容都以大写字母写入:CREATE TABLE ACCOUNTS(USERNAME TEXT,PASSWORD TEXT,personID INTEGER) –
我必须出去。当我回来时,我会看看。看看这里http://www.tutorialspoint.com/android/android_sqlite_database.htm http://developer.android.com/reference/android/database/sqlite/package-summary.html –