2013-05-21 231 views
2

我有一個頁面,可以從數據庫 檢索用戶數據,但經過一整天的嘗試,我只能夠獲取表列名稱,而不是內部的值。從數據庫獲取數據Android

這是我的代碼來創建數據庫

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,但是在哪裏設置?

感謝您的幫助

回答

2

您嘗試讀取值的方式完全錯誤。 創建陣列

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

謝謝!它的作品〜 只有「cursor.getInteger」應該改爲「cursor.getInt」 – Sunny

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); 
        //.... 
     } 
} 

希望這有助於

+1

謝謝,你的答案也是正確的〜對不起,不能讓你們倆都成爲正確答案 – Sunny

0

這裏是我的解決方案:

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