2012-02-06 83 views
0

我是android開發中的新成員。如何從多個表中獲取數據

我將一張專輯列表存儲在具有以下列的表中:albumid,albumname。

歌曲表格包含以下列:songid,song_title,tracksong_id,其中tracksong_id是引用albumid的外鍵。

我創建表的查詢歌曲表:

創建表的專輯(ID整數主鍵自動遞增,ALBUM_NAME文本)

創建表歌曲(song_id整數主鍵自動遞增,SONG_NAME文本不爲空, SONG_TITLE文字不爲空,tracksong_id整數,tracksong_id整數,外鍵(tracksong_id)參考專輯(album_id))

有關讀取所有歌曲詳細信息

公共AlbumDTO getSOngById(長ID)

{

AlbumDTO occasionDTO = null;光標c = db.query(DATABASE_TABLE_SONG,new String [] {KEY_SONG_NAME,KEY_SONG_TITEL,TRACKSONGID},TRACKSONGID +「=」+ id,null,null,null,null);光標c = db.query(DATABASE_TABLE_SONG,

如果(c.moveToNext())

{

occasionDTO=new AlbumDTO(); 

//occasionDTO.song_id=c.getLong(c.getColumnIndex(KEY_SONG_ID)); 

occasionDTO.song_name=c.getString(c.getColumnIndex(KEY_SONG_NAME)).trim(); 

occasionDTO.song_title=c.getString(c.getColumnIndex(KEY_SONG_TITEL)).trim(); 

occasionDTO.tracksong_id=c.getLong(c.getColumnIndex(TRACKSONGID)); 

}

接近();

return occasionDTO;

}

如何從兩個表中獲取所有數據?一張專輯可以包含許多歌曲。

感謝支持

+0

嘗試查找ContentProviders。 – JoxTraex 2012-02-06 05:09:30

+0

如何將這兩個表都與這兩列中的一個公共列相關聯,您可以從這兩個表中獲取數據。 – 2012-02-06 05:21:30

+0

@arpit回答更新 – Hank 2012-02-06 14:04:59

回答

1

好吧,這是你想要什麼:

public static final String TABLE_SONG_JOIN_ALBUM = "song LEFT JOIN album ON sone. tracksong_id = album.id"; 
public static final String[] PROJECTION = new String[] { 
    "song.song_name", 
    "album.album_name" 
    // maybe you want more field here 
}; 

public AlbumDTO getSOngById(long id) { 
    SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); 
    qb.setTables(TABLE_SONG_JOIN_ALBUM); 
    String selection = "song.id = "+id; 
    SQLiteDatabase db = dbHelper.getReadableDatabase(); 
    Cursor c = qb.query(db, PROJECTION, selection, null, null, null, sortOrder, null); 

    AlbumDTO occasionDTO=null; 
    if(c.moveToNext()) { 
     occasionDTO=new AlbumDTO(); 
     occasionDTO.song_id=c.getLong(c.getColumnIndex(KEY_SONG_ID)); 
     occasionDTO.song_name=c.getString(c.getColumnIndex(KEY_SONG_NAME)).trim(); 
     occasionDTO.song_title=c.getString(c.getColumnIndex(KEY_SONG_TITEL)).trim(); 
     occasionDTO.tracksong_id=c.getLong(c.getColumnIndex(TRACKSONGID)); 
    } 

    db.close(); 
    return occasionDTO; 
} 
+0

感謝您的回覆,但沒有必要使外國key.plz檢查這個http:// stackoverflow。COM /問題/ 9159824 /故障在-featching數據,從桌 – arpit 2012-02-06 15:26:08

0

表1 COL1 COL2 COL3

表2 COL1 COL2 COL3

如果我們想從這兩個表中選擇一列,然後下面的查詢很有用

「select a1.col1,a2.col1 from table1 a1,table2 a2 where;」

這裏a1和a2是別名