package com.wistron.WiGallery; import java.util.ArrayList; import java.util.List; import Utilities.CSStaticData; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteException; import android.database.sqlite.SQLiteOpenHelper; /** * * @author Cocoonshu * */ public class FavoriteDBAdapter{ private Context mContext = null; private FavoriteDBHelper mDbHelper = null; private SQLiteDatabase mDatabase = null; private int mDBVersion = 1; private String mDBName = CSStaticData.DBNAME_FAVORITE; private String mDBTableName = "favorite"; private String mDBColUid = "uid"; private String mDBColFileName = "filename"; private String mCreateTableStr = null; public FavoriteDBAdapter(Context context){ mContext = context; mDbHelper = new FavoriteDBHelper(context, mDBName, null, mDBVersion); /* * CREATE TABLE IF NOT EXISTS favorite( * uid INTEGER PRIMARY KEY AUTOINCREMENT, * filename TEXT NOT NULL ) */ mCreateTableStr = "CREATE TABLE IF NOT EXISTS " + mDBTableName + " ( " + mDBColUid + " INTEGER PRIMARY KEY AUTOINCREMENT, " + mDBColFileName + " TEXT NOT NULL ) "; } /** * 设置一系列文件的favorite标签 * @param filenames */ public void setAsFavorite(List<String> filenames){ int listSize = 0; if(filenames == null || filenames.size() == 0){ return; } open(); listSize = filenames.size(); for(int i = 0; i < listSize; i++){ try { if(!select(filenames.get(i))){ insert(filenames.get(i)); } } catch (SQLException exp) { exp.printStackTrace(); //then Do Nothing and continue to next } } close(); } /** * 移除一系列文件的favorite标签 * @param filenames */ public void removeFromFavorite(List<String> filenames){ int listSize = 0; if(filenames == null || filenames.size() == 0){ return; } open(); listSize = filenames.size(); for(int i = 0; i < listSize; i++){ try{ delete(filenames.get(i)); }catch (SQLException exp) { exp.printStackTrace(); //then Do Nothing and continue to next } } close(); } /** * 获取被设定favorite标签的文件 * @return */ public List<String> getFavoriteFiles(){ List<String> result = new ArrayList<String>(); open(); result = select(); close(); return result; } public void clearDataBase(){ clear(); } /** * 析构函数 * @return */ public FavoriteDBAdapter dispose(){ if(mDatabase != null){ mDatabase.releaseReference(); } return null; } private void open(){ try{ if(mDatabase != null && mDatabase.isOpen()){ return; }else{ mDatabase = mDbHelper.getWritableDatabase(); } }catch(SQLiteException exp){ mDbHelper.close(); mDatabase = mDbHelper.getWritableDatabase(); }finally{ //Do Nothing } } private void close(){ try{ if(mDbHelper != null){ mDbHelper.close(); } if(mDatabase != null){ if(mDatabase.isOpen()){ mDatabase.close(); } mDatabase = null; } }catch (Exception exp) { mDbHelper.close(); }finally{ //Do Nothing } } private void insert(String filename) throws SQLException{ String sql = null; /* * INSERT INTO favorite(filename) * VALUES('mnt/sdcard/123.jpg') */ sql = "INSERT INTO " + mDBTableName + " ( " + mDBColFileName + " ) " + "VALUES ( '" + filename + "') "; if(mDatabase != null && mDatabase.isOpen()){ mDatabase.execSQL(sql); }else{ open(); mDatabase.execSQL(sql); } } private boolean select(String filename){ int size = 0; String sql = null; boolean result = false; Cursor cursor = null; /* * SELECT * * FROM favorite * WHERE filename = 'mnt/sdcard/123.jpg' */ sql = "SELECT * " + " " + "FROM " + mDBTableName + " " + "WHERE " + mDBColFileName + " = '" + filename + "'"; if(mDatabase != null && mDatabase.isOpen()){ cursor = mDatabase.rawQuery(sql, null); }else{ open(); if(mDatabase != null){ cursor = mDatabase.rawQuery(sql, null); } } if(cursor != null && cursor.getCount() > 0){ result = true; cursor.close(); }else{ result = false; } return result; } private List<String> select(){ int size = 0; String sql = null; Cursor cursor = null; List<String> result = new ArrayList<String>(); /* * SELECT * * FROM favorite */ sql = "SELECT * " + " " + "FROM " + mDBTableName; if(mDatabase != null && mDatabase.isOpen()){ cursor = mDatabase.rawQuery(sql, null); }else{ open(); if(mDatabase != null){ cursor = mDatabase.rawQuery(sql, null); } } if(cursor != null){ size = cursor.getCount(); cursor.moveToFirst(); for(int i = 0; i < size; i++){ result.add(cursor.getString(1)); cursor.moveToNext(); } cursor.close(); } return result; } private void delete(String filename) throws SQLException{ String sql = null; /* * DELETE FROM favorite * WHERE filename = '/mnt/sdcard/123.jpg' */ sql = "DELETE FROM " + mDBTableName + " " + "WHERE " + mDBColFileName + " = '" + filename + "' "; if(mDatabase != null && mDatabase.isOpen()){ mDatabase.execSQL(sql); }else{ open(); mDatabase.execSQL(sql); } } private void clear() throws SQLException{ String sql = null; /* * DELETE FROM favorite */ sql = "DELETE FROM " + mDBTableName + " "; if(mDatabase != null && mDatabase.isOpen()){ mDatabase.execSQL(sql); }else{ open(); mDatabase.execSQL(sql); } } /** * * @author Cocoonshu * */ class FavoriteDBHelper extends SQLiteOpenHelper{ public FavoriteDBHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(mCreateTableStr); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } } }