package com.qmusic.dal; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; import com.qmusic.entities.BCommonEntity; public class CommonTable extends BaseTable { public static final String TABLE_NAME = "Common"; public static final String FIELD_CATEGORY = "category"; public static final String FIELD_NAME = "name"; public static final String FIELD_OPTION = "option"; public static final String FIELD_STATUS = "state"; public static final String FIELD_TIME = "time"; public static final Uri CONTENT_URL = Uri.parse("content://" + BContentProvider.AUTHORITY + "/" + TABLE_NAME); private static final String[] PROJECTION = new String[] { _ID, FIELD_CATEGORY, FIELD_NAME, FIELD_OPTION, FIELD_STATUS, FIELD_TIME }; @Override protected String getTableName() { return TABLE_NAME; } @Override protected void initField(HashMap<String, Class<?>> fields) { fields.put(FIELD_CATEGORY, String.class); fields.put(FIELD_NAME, String.class); fields.put(FIELD_OPTION, String.class); fields.put(FIELD_STATUS, Integer.class); fields.put(FIELD_TIME, Integer.class); } public int count(String category) { Cursor cursor = null; int result = 0; try { cursor = query(new String[] { _ID }, FIELD_CATEGORY + "=?", new String[] { category }, null, null, null, null); result = cursor.getCount(); } catch (Exception ex) { ex.printStackTrace(); } finally { if (cursor != null) { cursor.close(); } } return result; } public List<BCommonEntity> query(String category) { List<BCommonEntity> result = new ArrayList<BCommonEntity>(); Cursor cursor = null; try { cursor = super.query(PROJECTION, FIELD_CATEGORY + "=?", new String[] { category }, null, null, null); while (cursor.moveToNext()) { BCommonEntity common = cursorToEntity(cursor); result.add(common); } } catch (Exception ex) { ex.printStackTrace(); } finally { if (cursor != null) { cursor.close(); } } return result; } public long insert(BCommonEntity common) { if (common.id > 0) { Cursor cursor = query(null, _ID + "=" + common.id, null, null, null, null); if (cursor.getCount() > 0) { return update(common); } } ContentValues cv = new ContentValues(); cv.put(FIELD_CATEGORY, common.category); cv.put(FIELD_NAME, common.name); cv.put(FIELD_OPTION, common.option); cv.put(FIELD_STATUS, common.state); cv.put(FIELD_TIME, System.currentTimeMillis()); return super.insert(cv); } @SuppressWarnings("rawtypes") public void insert(String category, Collection list) { try { SQLiteDatabase sqliteDatabase = BDatabaseHelper.getDatabase(); sqliteDatabase.beginTransaction(); Iterator iterator = list.iterator(); while (iterator.hasNext()) { Object item = iterator.next(); ContentValues cv = new ContentValues(); cv.put(CommonTable.FIELD_CATEGORY, category); cv.put(CommonTable.FIELD_TIME, System.currentTimeMillis()); cv.put(CommonTable.FIELD_STATUS, 0); cv.put(CommonTable.FIELD_OPTION, "" + item); sqliteDatabase.insert(TABLE_NAME, null, cv); } sqliteDatabase.setTransactionSuccessful(); sqliteDatabase.endTransaction(); } catch (Exception ex) { ex.printStackTrace(); } } public int update(BCommonEntity common) { if (common.id > 0) { ContentValues cv = new ContentValues(); cv.put(FIELD_CATEGORY, common.category); cv.put(FIELD_NAME, common.name); cv.put(FIELD_OPTION, common.option); cv.put(FIELD_STATUS, common.state); cv.put(FIELD_TIME, System.currentTimeMillis()); return super.update(cv, _ID + "=?", new String[] { String.valueOf(common.id) }); } else { return (int) insert(common); } } public List<BCommonEntity> query(Map<String, Object> wheres) { List<BCommonEntity> result = new ArrayList<BCommonEntity>(); Cursor cursor = null; try { StringBuilder sb = null; String[] whereArgs = null; if (wheres != null && wheres.size() > 0) { sb = new StringBuilder(); whereArgs = new String[wheres.size()]; Set<String> keys = wheres.keySet(); boolean isFirst = true; int i = 0; for (String key : keys) { if (isFirst) { isFirst = false; } else { sb.append(" and "); } sb.append("[").append(key).append("]=?"); whereArgs[i] = wheres.get(key).toString(); i++; } } cursor = super.query(PROJECTION, sb == null ? null : sb.toString(), whereArgs, null, null, "[time] desc"); while (cursor.moveToNext()) { BCommonEntity cv = cursorToEntity(cursor); result.add(cv); } } catch (Exception ex) { ex.printStackTrace(); } finally { if (cursor != null) { cursor.close(); } } return result; } private BCommonEntity cursorToEntity(Cursor cursor) { BCommonEntity common = new BCommonEntity(); common.id = cursor.getLong(0); common.category = cursor.getString(1); common.name = cursor.getString(2); common.option = cursor.getString(3); common.state = cursor.getInt(4); common.time = new Date(cursor.getLong(5)); return common; } }