如何从多个表中获取数据

时间:2012-02-06 05:06:01

标签: android sqlite fetch

我是android开发的新手。

我将相册列表存储在包含以下列的表格中:albumid,albumname。

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

我对歌曲表的创建表查询是:

创建表专辑(id integer primary key autoincrement,album_name text)

创建表歌曲(song_id整数主键自动增量,song_name文本不为null,song_title文本不为null,tracksong_id整数,tracksong_id整数,FOREIGN KEY(tracksong_id)REFERENCES专辑(album_id))

获取所有歌曲详情

public AlbumDTO getSOngById(long 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.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));

}

接近();

返回场合DTO;

}

如何从两个表中获取所有数据?一张专辑可以包含很多歌曲。

感谢您的支持

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

表1 col1 col2 col3

表2 col1 col2 col3

如果我们想从两个表中选择一个列,那么以下查询是有用的

“从table1 a1,table2 a2中选择a1.col1,a2.col1;”

这里a1和a2是别名