package com.ringtone.music;
import java.util.ArrayList;
import java.util.Iterator;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
public class DbAdapter extends Activity{
private final static int DB_VERSION = 4;
private final static int MAX_RECORD_NUMBER = 2;
private static final String TableHistory = "search_history";
private static final String TableInfo = "infotable";
private static final String SQLCreateTable = "create table if not exists search_history (_id integer primary key autoincrement,"
+ MusicInfo.TYPT_PAGE + " integer,"
+ MusicInfo.TYPE_TITLE + " text,"
+ MusicInfo.TYPE_ARTIST + " text,"
+ MusicInfo.TYPE_ALBUM + " text,"
+ MusicInfo.TYPE_TYPE + " text,"
+ MusicInfo.TYPE_DISPLAYSIZE + " text,"
+ MusicInfo.TYPE_URL + " text);";
private static final String SQLCreateInfo = "create table if not exists infotable (maxpage integer, minpage integer);";
private static int mMaxPageNum; // 最大页码
private static int mMinPageNum; // 最小页码
private static class SearchDBHelper extends SQLiteOpenHelper {
public SearchDBHelper(Context context, String name) {
super(context, name, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
dropTable(db);
createTable(db);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
dropTable(db);
createTable(db);
}
private void createTable(SQLiteDatabase db) {
db.execSQL(SQLCreateTable);
db.execSQL(SQLCreateInfo);
}
private void dropTable(SQLiteDatabase db) {
try {
db.execSQL("DROP TABLE IF EXISTS " + TableHistory);
db.execSQL("DROP TABLE IF EXISTS " + TableInfo);
} catch (SQLException ex) {
}
}
}
SearchDBHelper mOpenHelper;
public DbAdapter(Context ctx) {
mOpenHelper = new SearchDBHelper(ctx, "music.db");
};
private static final String[] projection_key = new String[] {"_id", MusicInfo.TYPT_PAGE, MusicInfo.TYPE_TITLE,
MusicInfo.TYPE_ARTIST,MusicInfo.TYPE_ALBUM,MusicInfo.TYPE_DISPLAYSIZE,
MusicInfo.TYPE_TYPE,MusicInfo.TYPE_URL
};
public void insertHistory(ArrayList<MusicInfo> mp3List){
if (mp3List == null)
return;
try{
Iterator it=mp3List.iterator();
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
int maxpage=getMaxPageNum();
if (maxpage==-1){
db.execSQL("delete from infotable;");
db.execSQL("insert into infotable values(1,0);");
maxpage++;
} else {
db.execSQL("update infotable set maxpage = maxpage +1;");
}
maxpage++;
while(it.hasNext()){
MusicInfo mi=(MusicInfo) it.next();
ContentValues cv = new ContentValues();
cv.put(MusicInfo.TYPE_TITLE, mi.getTitle());
cv.put(MusicInfo.TYPE_ARTIST, mi.getArtist());
cv.put(MusicInfo.TYPE_ALBUM, mi.getAlbum());
cv.put(MusicInfo.TYPE_DISPLAYSIZE, mi.getDisplayFileSize());
cv.put(MusicInfo.TYPE_TYPE, mi.getType());
cv.put(MusicInfo.TYPE_URL, mi.getUrl());
cv.put(MusicInfo.TYPT_PAGE, maxpage);
db.insert(TableHistory, null, cv);
}
// 暂不删除下载下来的记录
// if (getMaxPageNum()-getMinPageNum()>=MAX_RECORD_NUMBER){
// String deleteSQL="delete from "+TableHistory+" where "+MusicInfo.TYPT_PAGE+ " <="+Integer.toString(getMaxPageNum()-MAX_RECORD_NUMBER);
// db.execSQL(deleteSQL);
// String updateSQL="update infotable set mixpage ="+Integer.toString(getMaxPageNum()-MAX_RECORD_NUMBER+1);
// db.execSQL(updateSQL);
// }
} catch (SQLiteException e) {
e.printStackTrace();
}
}
// public Cursor getHistory(){
// try{
// int MaxPageNum = getMaxPageNum();
// return getHistoryByPage(MaxPageNum);
// } catch(Exception e) {
// return null;
// }
// }
//
public void dropall() {
try {
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
db.execSQL("DROP TABLE IF EXISTS " + TableHistory);
db.execSQL("DROP TABLE IF EXISTS " + TableInfo);
db.execSQL(SQLCreateTable);
db.execSQL(SQLCreateInfo);
} catch (SQLException e) {
e.printStackTrace();
}
}
public Cursor getHistoryByPage(int pagenum){
try{
SQLiteDatabase db = mOpenHelper.getReadableDatabase();
String selection = "("+ MusicInfo.TYPT_PAGE+ " = ? )";
ArrayList<String> args = new ArrayList<String>();
args.add(Integer.toString(pagenum));
String[] argsArray = args.toArray(new String[args.size()]);
Cursor c=db.query(TableHistory, projection_key, selection, argsArray, null, null, null);
startManagingCursor(c);
return c;
}catch(Exception e) {
return null;
}
}
public int getMaxPageNum(){
try{
SQLiteDatabase db = mOpenHelper.getReadableDatabase();
Cursor c;
c=db.query(TableInfo,new String[] {"maxpage"},null,null,null,null,null);
startManagingCursor(c);
if (c!= null && 0 != c.getCount()){
c.moveToFirst();
int i=c.getColumnIndex("maxpage");
return c.getInt(i);
} else {
return -1;
}
}catch(Exception e) {
return -1;
}
}
public void initCache(){
int maxpage=getMaxPageNum();
if (maxpage>0){
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
String deleteSQL="delete from "
+ TableHistory
+ " where " + MusicInfo.TYPT_PAGE+ " < "+Integer.toString(maxpage);
db.execSQL(deleteSQL);
db.execSQL("update "+TableHistory+ " set "+MusicInfo.TYPT_PAGE+"=1");
db.execSQL("update "+TableInfo+ " set maxpage = 1");
}
}
@Override
protected void onDestroy() {
super.onDestroy();
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
db.close();
}
}