如何从sqlite DB中的表中获取特定的字符串结果?

时间:2014-02-20 12:09:13

标签: java android sqlite

我有一个表格,其中包含用户的详细信息。该表的架构如下所示:

user (id,fname,lname,email,password);

我想使用他的电子邮件获取特定用户的密码。我已经尝试了下面的代码,但没有工作。

Check user=new Check(false);
String  searchQuery= " SELECT * FROM " + TABLE_USER + " WHERE " +
        KEY_EMAIL   + " LIKE   '" + uemail+ "'";
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(searchQuery, null);
if (cursor!=null)
{
    user.setExist(true);
    cursor.moveToFirst();
    searchQuery= " SELECT " +  KEY_PASSWORD + " FROM "  +  
            TABLE_USER + " WHERE " +   KEY_EMAIL + " LIKE '" + uemail+ "'";
    cursor = db.rawQuery(searchQuery, null);
line
    user.setPassword(cursor.getString((cursor.getColumnIndex(KEY_PASSWORD))));
    return user;
}
else
{
    return user;
}

但是我遇到了运行时错误,日志猫看起来像这样:

02-20 15:04:39.341: E/AndroidRuntime(1521): FATAL EXCEPTION: main
02-20 15:04:39.341: E/AndroidRuntime(1521):            android.database.CursorIndexOutOfBoundsException: 
Index -1 requested, with a size of 2
02-20 15:04:39.341: E/AndroidRuntime(1521):     at    android.database.AbstractCursor.checkPosition(AbstractCursor.java:424)
02-20 15:04:39.341: E/AndroidRuntime(1521):     at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
02-20 15:04:39.341: E/AndroidRuntime(1521):     at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
02-20 15:04:39.341: E/AndroidRuntime(1521):     at   org.example.cinema.MovieDB.getPass(MovieDB.java:440)
 02-20 15:04:39.341: E/AndroidRuntime(1521):    at org.example.cinema.MainActivity.authUser(MainActivity.java:52)
 02-20 15:04:39.341: E/AndroidRuntime(1521):    at org.example.cinema.MainActivity$1.onClick(MainActivity.java:34)
 02-20 15:04:39.341: E/AndroidRuntime(1521):    at android.view.View.performClick(View.java:4240)
 02-20 15:04:39.341: E/AndroidRuntime(1521):    at android.view.View$PerformClick.run(View.java:17721)
 02-20 15:04:39.341: E/AndroidRuntime(1521):    at android.os.Handler.handleCallback(Handler.java:730)
 02-20 15:04:39.341: E/AndroidRuntime(1521):    at android.os.Handler.dispatchMessage(Handler.java:92)
 02-20 15:04:39.341: E/AndroidRuntime(1521):    at android.os.Looper.loop(Looper.java:137)
 02-20 15:04:39.341: E/AndroidRuntime(1521):    at android.app.ActivityThread.main(ActivityThread.java:5103)
 02-20 15:04:39.341: E/AndroidRuntime(1521):    at java.lang.reflect.Method.invokeNative(Native Method)
 02-20 15:04:39.341: E/AndroidRuntime(1521):    at java.lang.reflect.Method.invoke(Method.java:525)
 02-20 15:04:39.341: E/AndroidRuntime(1521):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
 02-20 15:04:39.341: E/AndroidRuntime(1521):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
 02-20 15:04:39.341: E/AndroidRuntime(1521):    at dalvik.system.NativeStart.main(Native Method)

2 个答案:

答案 0 :(得分:0)

我想,你需要在下面的行之后再次写cursor.moveToFirst();

cursor = db.rawQuery(searchQuery, null);

更新了代码,

Check user=new Check(false);
String  searchQuery= " SELECT * FROM " + TABLE_USER + " WHERE " +
        KEY_EMAIL   + " LIKE   '" + uemail+ "'";
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(searchQuery, null);
if (cursor!=null)
{
    user.setExist(true);
    cursor.moveToFirst();
    searchQuery= " SELECT " +  KEY_PASSWORD + " FROM "  +  
            TABLE_USER + " WHERE " +   KEY_EMAIL + " LIKE '" + uemail+ "'";
    cursor = db.rawQuery(searchQuery, null);
    cursor.moveToFirst();                                    // Add this line
    user.setPassword(cursor.getString((cursor.getColumnIndex(KEY_PASSWORD))));
    return user;
}
else
{
    return user;
}

答案 1 :(得分:0)

按照这个例子

public String getQty(String A , String B, String C)
    {
        Cursor cursor = database.query(TABLE_NAME,
                null,
                Coloum_Name1 + "='"+ A + "' AND " + Coloum_Name2 + "='" + B +"' AND " + Coloum_Name3 + "='" + C +"'",
                null, null, null, null);

        cursor.moveToFirst();

        String D = cursor.getString(cursor.getColumnIndex(Coloum_Name1/2/3));

        return D ;
    }