从数据库Android获取数据

时间:2013-05-21 10:09:14

标签: android database sqlite limit tablecolumn

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

这是我创建数据库的代码

 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();

并且toast结果只显示列名但不显示里面的值,是否有任何错误?我想将限制设置为1,但在哪里设置它?

感谢您的帮助

3 个答案:

答案 0 :(得分:2)

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

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

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

如果要显示查询中的值,请执行以下操作:

    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) );

答案 1 :(得分: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);
                    //....
        }
}

希望这有帮助

答案 2 :(得分: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();