content: 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;
          }
      }
  }
  