package com.kitty.poclient.dao; import java.sql.SQLDataException; import java.util.ArrayList; import java.util.List; import java.util.Map; import android.content.ContentValues; import android.database.Cursor; import android.util.Log; import com.kitty.poclient.db.DBHelper; import com.kitty.poclient.domain.Music; import com.kitty.poclient.util.UniqueId; public class MusicDao { /** * 根据id检测是否存在id * * @param id * @return */ public boolean getMusicById(Long id) { Cursor cur = DBHelper.getSqLitedatabase().rawQuery("select id from db_music where id = " + id, null); if (cur.getCount() > 0) { return true; } if (cur != null) { cur.close(); } return false; } /** * 插入id */ public synchronized void insertMusic(Music music) { if (music == null) { return; } try { DBHelper.getSqLitedatabase().beginTransaction(); if (!getMusicById(music.getId())) { String sql = "select db.id from db_disk db where id= " + music.getDiskId(); // Cursor cur= DBHelper.getSqLitedatabase().rawQuery(sql, null); ContentValues addv = new ContentValues(); // while(cur.moveToNext()){ // music.setDiskId(cur.getLong(0)); // } if (music.getDiskId() == 0) { music.setDiskId(UniqueId.genId()); addv.put("id", music.getDiskId()); addv.put("name", music.getDiskName()); addv.put("disk_no", music.getDisk_no()); addv.put("album_id", music.getAlbumId()); DBHelper.getSqLitedatabase().insert("db_disk", null, addv); } else { Cursor cur = DBHelper.getSqLitedatabase().rawQuery(sql, null); if (cur.getCount() > 0) { } else { addv.put("id", music.getDiskId()); addv.put("name", music.getDiskName()); addv.put("disk_no", music.getDiskName()); addv.put("album_id", music.getAlbumId()); DBHelper.getSqLitedatabase().insert("db_disk", null, addv); } if (cur != null) { cur.close(); } } try { Thread.sleep(30); } catch (InterruptedException e) { e.printStackTrace(); } addv.clear(); addv.put("buytime", music.getBuytime()); DBHelper.getSqLitedatabase().update("db_album", addv, "id=" + music.getAlbumId(), null); addv.clear(); addv.put("id", music.getId()); addv.put("name", music.getName()); addv.put("media_url", music.getMediaurl()); addv.put("disk_id", music.getDiskId()); addv.put("first_char", music.getFirstChar()); addv.put("track_no", music.getTrack_no()); addv.put("play_time", music.getPlay_time()); addv.put("file_size", music.getFile_size()); addv.put("buytime", music.getBuytime()); addv.put("lib_id", music.getLibid()); addv.put("isclearcache", music.getIscloud()); DBHelper.getSqLitedatabase().insert("db_music", null, addv); } else { DBHelper.getSqLitedatabase().execSQL("update db_music set isclearcache = " + music.getIscloud() + " where id=" + music.getId()); } } catch (Exception e) { e.printStackTrace(); } finally { DBHelper.getSqLitedatabase().setTransactionSuccessful(); DBHelper.getSqLitedatabase().endTransaction(); } } /** * 获取所有本地单曲 */ public List<Music> getAllMusic() { List<Music> musicli = null; Music music = null; long ctime = System.currentTimeMillis(); Cursor cur = DBHelper.getSqLitedatabase().rawQuery("select dbm.id,dbm.name,dbm.play_time,dbm.file_size,dbm.first_char,dbm.track_no,dbm.media_url,group_concat(dba.name) artitname,dba.id,db_album.img_url from db_album inner join db_disk on db_disk.album_id =db_album.id inner join db_music dbm on dbm.disk_id=db_disk.id inner join product_artist pa on pa.product_id =dbm.id left join db_artist dba on dba.id= pa.artist_id where dbm.isclearcache = 5 and db_album.isclearcache=5 group by dbm.id order by dbm.buytime desc", null); if (cur.getCount() > 0) { musicli = new ArrayList<Music>(); while (cur.moveToNext()) { music = new Music(); music.setId(cur.getLong(0)); music.setName(cur.getString(1)); music.setPlay_time(cur.getString(2)); music.setFile_size(cur.getString(3)); music.setFirstChar(cur.getString(4)); music.setTrack_no(cur.getString(5)); music.setMediaurl(cur.getString(6)); music.setArtistName(cur.getString(7)); music.setArtistId(cur.getString(8)); music.setImgUrl(cur.getString(9)); music.setIscloud(5); // music.set musicli.add(music); } } if (cur != null) { cur.close(); } return musicli; } public List<Music> getAllMusicII() { List<Music> musicli = null; Music music = null; long ctime = System.currentTimeMillis(); Cursor cur = DBHelper.getSqLitedatabase().rawQuery("select * from db_music", null); if (cur.getCount() > 0) { musicli = new ArrayList<Music>(); while (cur.moveToNext()) { music = new Music(); music.setId(cur.getLong(0)); music.setName(cur.getString(1)); music.setPlay_time(cur.getString(2)); music.setFile_size(cur.getString(3)); music.setFirstChar(cur.getString(4)); music.setTrack_no(cur.getString(5)); music.setMediaurl(cur.getString(6)); music.setArtistName(cur.getString(7)); music.setArtistId(cur.getString(8)); music.setImgUrl(cur.getString(9)); music.setIscloud(5); // music.set musicli.add(music); } } if (cur != null) { cur.close(); } return musicli; } /** * 更新清楚缓存状态信息 * * @param map */ public boolean updateCloudStates(Map<String, List<Long>> map) { List<Long> li = map.get("musics"); ContentValues addv = new ContentValues(); boolean flag = true; try { DBHelper.getSqLitedatabase().beginTransaction(); // addv.put("isclearcache", 5);//5表示需要显示的 String ids = ""; String sqlall = "update db_music set isclearcache = 0"; DBHelper.getSqLitedatabase().execSQL(sqlall); // 全部显示 for (Long l : li) { ids = ids + l + ","; } if(!ids.equals("")){ ids = ids.substring(0, ids.length() - 1); String updateisclear = "update db_music set isclearcache = 5 where id in ( " + ids + " )"; DBHelper.getSqLitedatabase().execSQL(updateisclear); } DBHelper.getSqLitedatabase().setTransactionSuccessful(); } catch (Exception e) { e.printStackTrace(); flag = false; } finally { DBHelper.getSqLitedatabase().endTransaction(); } return flag; } /** * 在云端 */ public List<Music> getMusicListForCloud(long pageIndex, int pageSize) { List<Music> musicli = null; Music music = null; long ctime = System.currentTimeMillis(); Cursor cur = DBHelper.getSqLitedatabase().rawQuery("select dbm.id,dbm.name,dbm.play_time,dbm.file_size,dbm.first_char,dbm.track_no,dbm.media_url,group_concat(dba.name) artitname,dba.id,db_album.img_url,dbm.isclearcache from db_album inner join db_disk on db_disk.album_id =db_album.id inner join db_music dbm on dbm.disk_id=db_disk.id inner join product_artist pa on pa.product_id =dbm.id inner join db_artist dba on dba.id= pa.artist_id where dbm.isclearcache = 0 group by dbm.id order by dbm.buytime desc limit " + pageIndex + " , " + pageSize, null); if (cur.getCount() > 0) { musicli = new ArrayList<Music>(); while (cur.moveToNext()) { music = new Music(); music.setId(cur.getLong(0)); music.setName(cur.getString(1)); music.setPlay_time(cur.getString(2)); music.setFile_size(cur.getString(3)); music.setFirstChar(cur.getString(4)); music.setTrack_no(cur.getString(5)); music.setMediaurl(cur.getString(6)); music.setArtistName(cur.getString(7)); music.setArtistId(cur.getString(8)); music.setImgUrl(cur.getString(9)); music.setIscloud(cur.getInt(10)); // music.set musicli.add(music); } } if (cur != null) { cur.close(); } Log.i("PurchasedFragment", "毫秒:" + System.currentTimeMillis() + "用了" + (System.currentTimeMillis() - ctime) + "毫秒"); return musicli; } /** * 全部单曲,本地和云端 */ public List<Music> getAllMusicList(long pageIndex, int pageSize) { List<Music> musicli = null; Music music = null; long ctime = System.currentTimeMillis(); Cursor cur = DBHelper.getSqLitedatabase().rawQuery("select dbm.id,dbm.name,dbm.play_time,dbm.file_size,dbm.first_char,dbm.track_no,dbm.media_url,group_concat(dba.name) artitname,dba.id,db_album.img_url,dbm.isclearcache from db_album inner join db_disk on db_disk.album_id =db_album.id inner join db_music dbm on dbm.disk_id=db_disk.id inner join product_artist pa on pa.product_id =dbm.id inner join db_artist dba on dba.id= pa.artist_id group by dbm.id order by dbm.buytime desc limit " + pageIndex + " , " + pageSize, null); if (cur.getCount() > 0) { musicli = new ArrayList<Music>(); while (cur.moveToNext()) { music = new Music(); music.setId(cur.getLong(0)); music.setName(cur.getString(1)); music.setPlay_time(cur.getString(2)); music.setFile_size(cur.getString(3)); music.setFirstChar(cur.getString(4)); music.setTrack_no(cur.getString(5)); music.setMediaurl(cur.getString(6)); music.setArtistName(cur.getString(7)); music.setArtistId(cur.getString(8)); music.setImgUrl(cur.getString(9)); music.setIscloud(cur.getInt(10)); // music.set musicli.add(music); } } if (cur != null) { cur.close(); } return musicli; } /** * 获取所有本地单曲 */ public List<Music> getAllMusic(long pageIndex, int pageSize) { List<Music> musicli = null; Music music = null; long ctime = System.currentTimeMillis(); Cursor cur = DBHelper.getSqLitedatabase().rawQuery("select dbm.id,dbm.name,dbm.play_time,dbm.file_size,dbm.first_char,dbm.track_no,dbm.media_url,group_concat(dba.name) artitname,dba.id,db_album.img_url,dbm.isclearcache from db_album inner join db_disk on db_disk.album_id =db_album.id inner join db_music dbm on dbm.disk_id=db_disk.id inner join product_artist pa on pa.product_id =dbm.id inner join db_artist dba on dba.id= pa.artist_id where dbm.isclearcache = 5 group by dbm.id order by dbm.buytime desc limit " + pageIndex + " , " + pageSize, null); if (cur.getCount() > 0) { musicli = new ArrayList<Music>(); while (cur.moveToNext()) { music = new Music(); music.setId(cur.getLong(0)); music.setName(cur.getString(1)); music.setPlay_time(cur.getString(2)); music.setFile_size(cur.getString(3)); music.setFirstChar(cur.getString(4)); music.setTrack_no(cur.getString(5)); music.setMediaurl(cur.getString(6)); music.setArtistName(cur.getString(7)); music.setArtistId(cur.getString(8)); music.setImgUrl(cur.getString(9)); music.setIscloud(cur.getInt(10)); // music.set musicli.add(music); } } if (cur != null) { cur.close(); } return musicli; } /** * 更新云音乐状态 * * @param id * @param state */ public void updateMusicState(String[] ids, int state) { try { // addv.put("isclearcache", 5);//5表示同步云端,0表示清除本地缓存 DBHelper.getSqLitedatabase().beginTransaction(); for (String id : ids) { DBHelper.getSqLitedatabase().execSQL("update db_music set isclearcache =" + state + " where id =" + id); } DBHelper.getSqLitedatabase().setTransactionSuccessful(); } catch (Exception e) { e.printStackTrace(); } finally { DBHelper.getSqLitedatabase().endTransaction(); } } /** * @description 根据单曲ID查询单曲的云状态:0在云端 5在本地 -1未购买 * @return int */ public int getMusicStateById(long id) { int state = -1; Cursor cur = DBHelper.getSqLitedatabase().rawQuery("select isclearcache from db_music where id=" + id, null); if (cur.getCount() > 0) { while (cur.moveToNext()) { state = cur.getInt(0); } } if (cur != null) { cur.close(); } return state; } /** * @author: ouyang * @throws SQLDataException * @description: 查询单曲的专辑ID */ public long getMusicContainerAlbumId(long musicId) throws SQLDataException { long albumId = -1; String sql = "select album_id from db_disk where id=(select disk_id from db_music where id=" + musicId + ")"; Cursor cursor = DBHelper.getSqLitedatabase().rawQuery(sql, null); if (cursor.getCount() != 1) { throw new SQLDataException("该单曲的包装专辑查询结果个数为:" + cursor.getCount()); } while (cursor.moveToNext()) { albumId = cursor.getLong(0); } if (cursor != null) { cursor.close(); } return albumId; } }