package org.droidklavier.db; import android.annotation.SuppressLint; import java.sql.ResultSet; import java.util.ArrayList; /** * Data Access Object * */ @SuppressLint("DefaultLocale") public class DAO { public static final String PIANOSOFT = "pianosoft"; public static final String USER = "user"; public static final String SEARCH_RESULT = "search_result"; private static final String ALBUM_COLUMN_NAMES = "album_id, title"; private static final String SONG_COLUMN_NAMES = "song_id, display_order, album_id, title, length"; private DBClient mDBClient; public DAO(DBClient dbClient) { mDBClient = dbClient; } public void setDBClient(DBClient dbClient) { mDBClient = dbClient; } public void setHost(String host) { if (mDBClient != null) { mDBClient.setHost(host); } } public Album getAlbum(String source, int albumId) { Album album = null; try { String query = String.format( "SELECT %1$s FROM %2$s_album WHERE album_id=%3$d", ALBUM_COLUMN_NAMES, source, albumId); ResultSet resultset = mDBClient.executeQuery(query); while (resultset.next()) { album = new Album(source, resultset.getInt("album_id"), resultset.getString("title")); } resultset.close(); } catch (Exception e) { e.printStackTrace(); } finally { mDBClient.disconnect(); } return album; } public Song getSong(String source, int albumId, int displayOrder) { Song song = null; try { String query = String.format( "SELECT song_id, display_order, album_id, title, length FROM %1$s_song WHERE album_id = %2$d AND display_order = %3$d", source, albumId, displayOrder); ResultSet rs = mDBClient.executeQuery(query); while (rs.next()) { song = new Song( source, rs.getInt("song_id"), rs.getInt("display_order"), rs.getInt("album_id"), rs.getString("title"), rs.getInt("length")); } rs.close(); } catch (Exception e) { e.printStackTrace(); } finally { mDBClient.disconnect(); } return song; } public Song getSearchResultSong(int songId, int albumId) { Song song = null; try { String query = String.format( "SELECT source FROM search_result_song WHERE song_id=%1$d AND album_id=%2$d", songId, albumId); ResultSet rs = mDBClient.executeQuery(query); String source = ""; while (rs.next()) { source = rs.getString("source"); } query = String.format( "SELECT %1$s_song.song_id, %1$s_song.display_order, %1$s_song.album_id, %1$s_song.title, %1$s_song.length FROM %1$s_song, search_result_song" + " WHERE search_result_song.album_id=%2$d AND search_result_song.song_id =%3$d AND search_result_song.song_id_to_play = %1$s_song.song_id", source, albumId, songId); rs = mDBClient.executeQuery(query); while (rs.next()) { song = new Song( source, rs.getInt("song_id"), rs.getInt("display_order"), rs.getInt("album_id"), rs.getString("title"), rs.getInt("length")); } rs.close(); } catch (Exception e) { e.printStackTrace(); } finally { mDBClient.disconnect(); } return song; } public ArrayList<Album> getAlbumList(String source) { ArrayList<Album> albums = new ArrayList<Album>(); try { String query = String.format( "SELECT %1$s FROM %2$s_album ORDER BY display_order", ALBUM_COLUMN_NAMES, source); ResultSet rs = mDBClient.executeQuery(query); while (rs.next()) { albums.add(new Album(source, rs.getInt("album_id"), rs.getString("title"))); } rs.close(); } catch (Exception e) { e.printStackTrace(); } finally { mDBClient.disconnect(); } return albums; } public ArrayList<Song> getSongList(String source, int albumId) { ArrayList<Song> songList = new ArrayList<Song>(); try { String query = String.format( "SELECT %1$s FROM %2$s_song WHERE album_id=%3$d ORDER BY display_order", SONG_COLUMN_NAMES, source, albumId); ResultSet rs = mDBClient.executeQuery(query); while (rs.next()) { songList.add(new Song( source, rs.getInt("song_id"), rs.getInt("display_order"), rs.getInt("album_id"), rs.getString("title"), rs.getInt("length"))); } rs.close(); } catch (Exception e) { e.printStackTrace(); } finally { mDBClient.disconnect(); } return songList; } public ArrayList<Song> getSearchResultSongList(int albumId) { ArrayList<Song> songs = new ArrayList<Song>(); try { String query = String.format( "SELECT * FROM search_result_song WHERE album_id=%d ORDER BY display_order", albumId); ResultSet rs = mDBClient.executeQuery(query); while (rs.next()) { songs.add(new Song( SEARCH_RESULT, rs.getInt("song_id"), rs.getInt("display_order"), rs.getInt("album_id"), rs.getString("title"), 0)); } rs.close(); } catch (Exception e) { e.printStackTrace(); } finally { mDBClient.disconnect(); } return songs; } }