2015-11-03 59 views
1

數據庫結構:如何獲得活動中的數據從GETALL()方法

詳細

rid  name 
    1  Beta 
    2  Release 

記錄

recid  rname conrid (conrid is rid from Detail table) 
    1  App1  1 
    2  App2  1 
    3  App3  2 
    4  App4  1 

我寫了一個方法,根據ridconrid獲取來自兩個表(Detail和Record)的所有數據。
下面是代碼:

String select = "SELECT rname FROM " + TABLE_RECORD+ " where conrid =" +detail.getId();  
+0

嘗試'從詳細內心的選擇Details.name,Record.rname JOIN記錄上記錄.conrid = Detail.rid' –

+0

注意,你不應該在主線程中執行此操作。另外這樣的方法恕我直言應該在一個單獨的類。您應該將GUI與業務邏輯分開。所以在你的Activity中使用這種方法已經不是一個好主意。還有那些方法名稱......使用更詳細的名稱,它會使您的代碼更具可讀性。 – m0skit0

+0

@Sophie當我的眼睛流血時,我無法幫助您解決您的問題。祝你好運。 – m0skit0

回答

2

看來你在一個循環,你byting你的尾巴是關閉...
因此,我將混合將您的代碼與@MD提供的答案結合在一起。

我相信他並沒有把它弄壞。 ;)

您將需要添加一個名爲RecDet的類(包含Detail中的Name字段和Record中的RName)。

使用那個代替DetailRecord

// to get all data from Detail and Record tables 
public List<RecDet> getAll() 
{ 
    List<RecDet> listRecDet = new ArrayList<RecDet>(); 

    // Select All Query 
    String selectQuery = 
     "SELECT Details.name, Record.rname FROM Detail INNER JOIN Record " + 
     "ON Record.conrid = Detail.rid"; 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    // looping through all rows and adding to list 
    if (cursor != null && cursor.moveToFirst()) 
    { 
     do 
     { 
      RecDet recdet = new RecDet(); 
      recdet.setName(cursor.getString(cursor.getColumnIndex("name"))); 
      recdet.setRname(cursor.getString(cursor.getColumnIndex("rname"))); 
      listRecDet.add(recdet); 
     } while (cursor.moveToNext()); 
    } 
    return listRecDet; 
} 
+1

非常感謝你,今天我得到了如何使用SQLite中的多個連接。真的太容易了! – Sophie

+0

多JOINS將幫助您加入2個以上的表格。 「典型」用法:以「多對多」關係連接3個表格。是的,這很容易。現在您應該加深對RDBMS的瞭解。 –

1

讓我們試試這個

select Details.name,Record.rname from Detail INNER JOIN Record ON Record.conrid=Detail.rid 
+0

在我的代碼中,我必須嘗試這個? – Sophie

+0

@Sophie這是'SQL'命令,你必須用'Cursor'執行它# –

+0

@Sophie。一旦你運行查詢,你會得到一個Cursor。就像你查詢單個表一樣。只需使用光標。 DONE! –