3

我有一个可以从数据库中检索用户数据的页面,但是经过一整天的尝试,我只能获取表列名,但不能获取里面的值。

这是我创建数据库的代码

 public static final String LASTLOGIN = "lastuser"; 
 public static final String USER_ID = "suser_id";
 public static final String USER_NAME = "suser_name";
 public static final String USER_PASSWORD = "spassword";
 public static final String PRIME_ID = "id";

 private static final String TABLE_USER = 
         "create table "+ LASTLOGIN+" ("
        +PRIME_ID+" integer primary key autoincrement, "
        + USER_ID + " text, "
        + USER_NAME +" text, "
        +USER_PASSWORD+" text); ";

这是为获取用户数据而实现的功能

public Cursor getuser()
{
    String[] columns = new String[]{PRIME_ID, USER_NAME, USER_PASSWORD};
    Cursor cursor = sqLiteDatabase.query(
           LASTLOGIN, columns, null, null, null, null, PRIME_ID +" DESC");
    Log.d("TAG", columns[1]);
    return cursor;
}

这是我显示结果的代码

mySQLiteAdapter = new SQLiteAdapter(this);
mySQLiteAdapter.openToWrite();

cursor = mySQLiteAdapter.getuser();
String[] resultvalue = new String{
         SQLiteAdapter.PRIME_ID,SQLiteAdapter.USER_NAME, SQLiteAdapter.USER_PASSWORD};
Toast.makeText(this, resultvalue[0]+resultvalue[1], Toast.LENGTH_LONG).show();

吐司结果只显示列名而不显示里面的值,我犯了什么错误吗?我想将限制设置为 1,但是在哪里设置呢?

谢谢你帮助我

4

3 回答 3

3

您尝试读取值的方式是完全错误的。你创建一个数组

String[] resultvalue = new String[]{
                       SQLiteAdapter.PRIME_ID,
                       SQLiteAdapter.USER_NAME,
                       SQLiteAdapter.USER_PASSWORD};

之后,您从该数组中读取值 0 和 1。您的吐司工作绝对正确,因为您在此数组中定义了列名!

如果要显示查询中的值,请这样做:

    while(cursor.moveToNext()){
            Integer str1 = str 1 + cursor.getInteger(1);
            String str2 =str2 + cursor.getString(2);
       Toast.makeText(this, str1 + str2, Toast.LENGTH_LONG).show();
    }

或接收正确索引的更好方法:

cursor.getInteger( cursor.getColumnIndex(SQLiteAdapter.PRIME_ID) );
cursor.getString( cursor.getColumnIndex(SQLiteAdapter.USER_NAME) );
于 2013-05-21T10:13:49.973 回答
2

请注意,从数据库中检索数据时,您将其存储在内存中的 Cursor 中,因此只能使用您在以下代码行中使用的特定 Cursor 对象来访问它。

Cursor cursor = mySQLiteAdapter.getuser();

以下行检索列名而不是值。

String[] resultvalue = new String[]{SQLiteAdapter.PRIME_ID,SQLiteAdapter.USER_NAME, SQLiteAdapter.USER_PASSWORD};

所以下面是做你要求它做的事情,检索列名而不是值

Toast.makeText(this, resultvalue[0]+resultvalue[1], Toast.LENGTH_LONG).show();

您需要以下内容:

if(cursor.getCount() != 0)
{
        while(cursor.moveToNext())
        {

                    resultvalue [0] = csr.getString(0);
                    resultvalue [1] = csr.getString(1);
                    //....
        }
}

希望这可以帮助

于 2013-05-21T10:25:47.497 回答
1

这是我的解决方案:

final String TABLE_NAME = "table_name";
String selectQuery = "SELECT Column FROM "+TABLE_NAME+" WHERE column='"+some_value+"'";
SQLiteDatabase db  = this.openDatabase();
Cursor cursor      = db.rawQuery(selectQuery, null);
String[] data      = new String[cursor.getCount()];;
int i = 0;

if (cursor.moveToFirst()) {
    do {
        i=Integer.parseInt(cursor.getString(cursor.getColumnIndex("value")));
    } while (cursor.moveToNext());
}
cursor.close();
于 2016-06-01T10:43:29.613 回答