package com.tiger.quicknews.dao; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import com.tiger.quicknews.bean.ChannelItem; import com.tiger.quicknews.db.SQLHelper; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class ChannelDao implements ChannelDaoInface { private SQLHelper helper = null; public ChannelDao(Context context) { helper = new SQLHelper(context); } @Override public boolean addCache(ChannelItem item) { boolean flag = false; SQLiteDatabase database = null; long id = -1; try { database = helper.getWritableDatabase(); database.beginTransaction(); ContentValues values = new ContentValues(); java.lang.Class<? extends ChannelItem> clazz = item.getClass(); String tableNmae = clazz.getSimpleName(); Method[] methods = clazz.getMethods(); for (Method method : methods) { String mName = method.getName(); if (mName.startsWith("get") && !mName.startsWith("getClass")) { String fieldName = mName.substring(3, mName.length()).toLowerCase(); Object value = method.invoke(item, null); if (value instanceof String) { values.put(fieldName, (String) value); } } } // values.put("name", item.getName()); // values.put("id", item.getId()); // values.put("orderId", item.getOrderId()); // values.put("selected", item.getSelected()); id = database.insert(tableNmae, null, values); flag = (id != -1 ? true : false); database.setTransactionSuccessful(); } catch (Exception e) { e.printStackTrace(); } finally { if (database != null) { database.endTransaction(); database.close(); } } return flag; } // @Override // public boolean addCache(ChannelItem item) { // boolean flag = false; // SQLiteDatabase database = null; // long id = -1; // try { // database = helper.getWritableDatabase(); // database.beginTransaction(); // ContentValues values = new ContentValues(); // values.put("name", item.getName()); // values.put("id", item.getId()); // values.put("orderId", item.getOrderId()); // values.put("selected", item.getSelected()); // id = database.insert(SQLHelper.TABLE_CHANNEL, null, values); // flag = (id != -1 ? true : false); // database.setTransactionSuccessful(); // } catch (Exception e) { // e.printStackTrace(); // } finally { // if (database != null) { // database.endTransaction(); // database.close(); // } // } // return flag; // } @Override public boolean deleteCache(String whereClause, String[] whereArgs) { boolean flag = false; SQLiteDatabase database = null; int count = 0; try { database = helper.getWritableDatabase(); database.beginTransaction(); count = database.delete(SQLHelper.TABLE_CHANNEL, whereClause, whereArgs); flag = (count > 0 ? true : false); database.setTransactionSuccessful(); } catch (Exception e) { e.printStackTrace(); } finally { if (database != null) { database.endTransaction(); database.close(); } } return flag; } @Override public boolean updateCache(ContentValues values, String whereClause, String[] whereArgs) { boolean flag = false; SQLiteDatabase database = null; int count = 0; try { database = helper.getWritableDatabase(); // count = database.update(SQLHelper.TABLE_CHANNEL, values, // whereClause, whereArgs); database.execSQL("update " + SQLHelper.TABLE_CHANNEL + " set selected = " + values.getAsString("selected") + " where id = " + values.getAsString("id")); flag = (count > 0 ? true : false); } catch (Exception e) { e.printStackTrace(); } finally { if (database != null) { database.endTransaction(); database.close(); } } return flag; } @Override public Map<String, String> viewCache(String selection, String[] selectionArgs) { SQLiteDatabase database = null; Cursor cursor = null; Map<String, String> map = new HashMap<String, String>(); try { database = helper.getReadableDatabase(); database.beginTransaction(); cursor = database.query(true, SQLHelper.TABLE_CHANNEL, null, selection, selectionArgs, null, null, null, null); int cols_len = cursor.getColumnCount(); while (cursor.moveToNext()) { for (int i = 0; i < cols_len; i++) { String cols_name = cursor.getColumnName(i); String cols_values = cursor.getString(cursor .getColumnIndex(cols_name)); if (cols_values == null) { cols_values = ""; } map.put(cols_name, cols_values); } } database.setTransactionSuccessful(); } catch (Exception e) { e.printStackTrace(); } finally { if (database != null) { database.endTransaction(); cursor.close(); database.close(); } } return map; } @Override public List<Map<String, String>> listCache(String selection, String[] selectionArgs) { List<Map<String, String>> list = new ArrayList<Map<String, String>>(); SQLiteDatabase database = null; Cursor cursor = null; try { database = helper.getReadableDatabase(); database.beginTransaction(); cursor = database.query(false, SQLHelper.TABLE_CHANNEL, null, selection, selectionArgs, null, null, null, null); int cols_len = cursor.getColumnCount(); while (cursor.moveToNext()) { Map<String, String> map = new HashMap<String, String>(); for (int i = 0; i < cols_len; i++) { String cols_name = cursor.getColumnName(i); String cols_values = cursor.getString(cursor .getColumnIndex(cols_name)); if (cols_values == null) { cols_values = ""; } map.put(cols_name, cols_values); } list.add(map); } database.setTransactionSuccessful(); } catch (Exception e) { e.printStackTrace(); } finally { if (database != null) { database.endTransaction(); cursor.close(); database.close(); } } return list; } @Override public void clearFeedTable() { String sql = "DELETE FROM " + SQLHelper.TABLE_CHANNEL + ";"; SQLiteDatabase db = helper.getWritableDatabase(); db.execSQL(sql); revertSeq(); } private void revertSeq() { String sql = "update sqlite_sequence set seq=0 where name='" + SQLHelper.TABLE_CHANNEL + "'"; SQLiteDatabase db = helper.getWritableDatabase(); db.execSQL(sql); } }