package com.wm.remusic.proxy.db; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; import com.wm.remusic.MainApplication; import java.util.Collection; import java.util.Map; public class CacheFileInfoDao extends SQLiteOpenHelper { static final int DB_VERSION = 1; static final String DB_NAME = "cachefileinfo.db"; static final String TABLE_NAME = "CacheFileInfo"; private static CacheFileInfoDao audioDao; synchronized public static CacheFileInfoDao getInstance() { if (audioDao == null) { audioDao = new CacheFileInfoDao(); } return audioDao; } private CacheFileInfoDao() { super(MainApplication.context, DB_NAME, null, DB_VERSION); } public void insertOrUpdate(String fileName, int fileSize) { CacheFileInfo cacheFileInfo = new CacheFileInfo(fileName, fileSize); if (getFileSize(cacheFileInfo.getFileName()) == -1) { insert(cacheFileInfo); } else { update(cacheFileInfo); } } private void insert(CacheFileInfo cacheFileInfo) { SQLiteDatabase sqLiteDatabase = getWritableDatabase(); sqLiteDatabase.beginTransaction(); try { ContentValues cv = packData(cacheFileInfo); sqLiteDatabase.insert(TABLE_NAME, null, cv); sqLiteDatabase.setTransactionSuccessful(); } finally { sqLiteDatabase.endTransaction(); } } public void delete(String fileName) { SQLiteDatabase sqLiteDatabase = getWritableDatabase(); sqLiteDatabase.beginTransaction(); try { sqLiteDatabase.delete(TABLE_NAME, "FileName=?", new String[]{fileName}); sqLiteDatabase.setTransactionSuccessful(); } finally { sqLiteDatabase.endTransaction(); } } private void update(CacheFileInfo cacheFileSize) { SQLiteDatabase sqLiteDatabase = getWritableDatabase(); sqLiteDatabase.beginTransaction(); try { ContentValues cv = packData(cacheFileSize); sqLiteDatabase.update(TABLE_NAME, cv, "FileName=?", new String[]{cacheFileSize.getFileName()}); sqLiteDatabase.setTransactionSuccessful(); } finally { sqLiteDatabase.endTransaction(); } } public int getFileSize(String fileName) { Cursor cursor = rawQuery("SELECT * FROM " + TABLE_NAME + " WHERE FileName=?", new String[]{fileName}); CacheFileInfo t = null; if (cursor != null) { if (cursor.moveToFirst()) { t = extractData(cursor); } cursor.close(); cursor = null; } if (t == null) { return -1; } else { return t.getFileSize(); } } public CacheFileInfo extractData(Cursor cursor) { if (null == cursor) { return null; } CacheFileInfo album = new CacheFileInfo(); album.setFileName(cursor.getString(cursor.getColumnIndex("FileName"))); album.setFileSize(cursor.getInt(cursor.getColumnIndex("FileSize"))); return album; } public ContentValues packData(CacheFileInfo cacheFileSize) { ContentValues cv = new ContentValues(); cv.put("FileName", cacheFileSize.getFileName()); cv.put("FileSize", cacheFileSize.getFileSize()); return cv; } @Override public void onCreate(SQLiteDatabase db) { Log.i("DB", "CreateTable " + TABLE_NAME); db.execSQL("create table " + TABLE_NAME + "(FileName STRING PRIMARY KEY,FileSize INTEGER)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } public Cursor rawQuery(String sql, String[] selectionArgs) { SQLiteDatabase database = getReadableDatabase(); return database.rawQuery(sql, selectionArgs); } public static boolean isNull(Object object) { if (object == null) { return true; } if (object instanceof Collection<?>) { return ((Collection<?>) object).size() == 0; } if (object instanceof Map<?, ?>) { return ((Map<?, ?>) object).size() == 0; } return false; } class CacheFileInfo { private String fileName; private int fileSize; public CacheFileInfo(String fileName, int fileSize) { this.fileName = fileName; this.fileSize = fileSize; } public CacheFileInfo() { } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } public int getFileSize() { return fileSize; } public void setFileSize(int fileSize) { this.fileSize = fileSize; } } }