2013-08-06 33 views
1

我已經做了拼接,到目前爲止,但在結果,它顯示Android的SQLite的Concat的兩列

UncleSam. 

我想要做的就是把兩列之間的空間,這樣的結果將是

Uncle Sam. 

這是我工作的代碼:從DBHelper.java

public Cursor getAllPatients() 
{ 
    Cursor localCursor = // 
      this.myDataBase.query(DB_TABLE, new String[] { 
        KEY_ID, KEY_FNAME + "||" + KEY_LNAME, KEY_DIAGNOSIS, KEY_LASTFFUP }, null, null, null, null, null); 
    if (localCursor != null) 
     localCursor.moveToFirst(); 
    return localCursor; 
} 

Cursor cursor = dbHelper.getAllPatients(); 
    String[] data = new String[]{ 
      DBHelper.KEY_FNAME + "||" + DBHelper.KEY_LNAME, DBHelper.KEY_DIAGNOSIS, DBHelper.KEY_LASTFFUP}; 
    // 
    int[] to = new int[] {R.id.fullname, R.id.diagnosis, R.id.lastffup}; 

    dataAdapter = new SimpleCursorAdapter(this, R.layout.custom_row, cursor, data, to, 0); 

從我的MainActivity。

任何幫助都可以。謝謝。

+0

添加一個額外的 「」 名稱和姓之間要檢索? – ClaireG

+0

當我嘗試時,它會拋出一些錯誤 – Dunkey

+0

爲什麼你需要連接它們? – Sajmon

回答

0

我終於搞定了。

public Cursor getAllPatients() 
{ 
Cursor localCursor = // 
     this.myDataBase.query(DB_TABLE, new String[] { 
       KEY_ID, KEY_FNAME + "|| ' ' ||" + KEY_LNAME, KEY_DIAGNOSIS, KEY_LASTFFUP }, null, null, null, null, null); 
if (localCursor != null) 
    localCursor.moveToFirst(); 
return localCursor; 
} 

Cursor cursor = dbHelper.getAllPatients(); 
String[] data = new String[]{ 
     DBHelper.KEY_FNAME + "|| ' ' ||" + DBHelper.KEY_LNAME, DBHelper.KEY_DIAGNOSIS, DBHelper.KEY_LASTFFUP}; 
// 
int[] to = new int[] {R.id.fullname, R.id.diagnosis, R.id.lastffup}; 

dataAdapter = new SimpleCursorAdapter(this, R.layout.custom_row, cursor, data, to, 0); 
3

您可以Concat的是這樣的:

Cursor localCursor = this.myDataBase.rawQuery("SELECT (KEY_FNAME || ' ' || KEY_LNAME) AS fullname, KEY_ID, KEY_DIAGNOSIS, KEY_LASTFFUP FROM DB_TABLE"); 

你concated全名會在光標欄 '全名'。

在主要活動:

String[] data = new String[]{ "fullname", DBHelper.KEY_DIAGNOSIS, DBHelper.KEY_LASTFFUP}; 

(你或許應該指定一個DBHelper常數 「全名」)。

+0

但是我的MainActivity怎麼樣? – Dunkey

+0

Simple:String [] data = new String [] { 「fullname」,DBHelper.KEY_DIAGNOSIS,DBHelper.KEY_LASTFFUP}; – VM4

+1

我認爲它會像這樣'SELECT KEY_FNAME || ''|| KEY_LNAME作爲全名,KEY_ID,KEY_DIAGNOSIS,KEY_LASTFFUP FROM DB_TABLE'。你可以'管道'連接'SQLite'中的兩列。 – 2013-08-06 16:47:56

0

的Android SQLite的Concat的兩列

與此線程一書的作者很少交談後,我建議你不要Concat的從遊標檢索出來的列(你真的不需要它)和CONCAT字符串。您的聲明將更具人性化和解決方案更清晰。

說明:

一般是代表你的應用層表,這將代表表的對象非常有用和有效的方法。例如,如果你有表User,那麼創建新的類User和表中的列將等於這個類中的屬性。這種方式是我猜很優雅(如果別人會看到你的代碼,他不會被迷惑和害怕)

最後,你可以簡單地CONCAT FNAME和LNAME當你把它們添加到ListAdapter


所以我更喜歡這種方式:

List<User> users = new ArrayList<User>(); 
User u = null; 
String query = "select * from Table"; 
Cursor c = db.rawQuery(query, null); 
if (c != null && c.moveToFirst()) { 
    do { 
     u = new User(); 
     u.setFirstName(c.getString(c.getColumnIndex("fname"))); 
     u.setLastName(c.getString(c.getColumnIndex("lname"))); 
     ... 
     users.add(u); 
    } while (c.moveToNext()); 
} 

然後在某處ListAdapter你可以這樣做:

textView.setText(u.getFirstname() + " " + u.getLastName()); 

希望它有幫助。

+0

我有點不同意,解決方案更清潔。確切地選擇你所需要的比通過數據不必要的循環更清潔。 SimpleCursorAdapter的目的是避免這些循環。 – VM4

+0

@VM他只是理論。在實際應用中通常使用這種方法。 – Sajmon