請求索引-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 –