package com.linju.android_property.database; import java.sql.SQLException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.Map.Entry; import android.content.ContentValues; import com.j256.ormlite.dao.Dao; import com.j256.ormlite.dao.Dao.CreateOrUpdateStatus; import com.j256.ormlite.stmt.DeleteBuilder; import com.j256.ormlite.stmt.QueryBuilder; import com.j256.ormlite.stmt.UpdateBuilder; import com.j256.ormlite.stmt.Where; @SuppressWarnings({ "unchecked", "rawtypes" }) public class BaseAppDbHelper<T> { /** 新增一条记录 */ synchronized public int create(T po) { BaseSQLiteHelperOrm db = new BaseAppSQLiteHelperOrm(); try { Dao dao = db.getDao(po.getClass()); return dao.create(po); } catch (SQLException e) { } finally { if (db != null) db.close(); } return -1; } /** * 是否存在满足条件的记录 * @param po * @param where * @return */ synchronized public boolean exists(T po, Map<String, Object> where) { BaseSQLiteHelperOrm db = new BaseAppSQLiteHelperOrm(); try { Dao dao = db.getDao(po.getClass()); if (dao.queryForFieldValues(where).size() > 0) { return true; } } catch (SQLException e) { } finally { if (db != null) db.close(); } return false; } /** * 不存在则创建 * @param po * @param where * @return */ synchronized public int createIfNotExists(T po, Map<String, Object> where) { BaseSQLiteHelperOrm db = new BaseAppSQLiteHelperOrm(); try { Dao dao = db.getDao(po.getClass()); if (dao.queryForFieldValues(where).size() < 1) { return dao.create(po); } } catch (SQLException e) { } finally { if (db != null) db.close(); } return -1; } /** 查询一条记录 */ synchronized public List<T> queryForEq(Class<T> c, String fieldName, Object value) { BaseSQLiteHelperOrm db = new BaseAppSQLiteHelperOrm(); try { Dao dao = db.getDao(c); return dao.queryForEq(fieldName, value); } catch (SQLException e) { } finally { if (db != null) db.close(); } return new ArrayList<T>(); } /** 查询一个记录 */ synchronized public T queryObjForEq(Class<T> c, String fieldName, Object value) { BaseSQLiteHelperOrm db = new BaseAppSQLiteHelperOrm(); try { Dao dao = db.getDao(c); List<T> ts = dao.queryForEq(fieldName, value); if(ts.size()>0){ return ts.get(0); } } catch (SQLException e) { } finally { if (db != null) db.close(); } return null; } /** 删除一条记录 */ synchronized public int remove(T po) { BaseSQLiteHelperOrm db = new BaseAppSQLiteHelperOrm(); try { Dao dao = db.getDao(po.getClass()); return dao.delete(po); } catch (SQLException e) { } finally { if (db != null) db.close(); } return -1; } /** * 根据特定条件更新特定字段 * * @param c * @param values * @param columnName where字段 * @param value where值 * @return */ synchronized public int update(Class<T> c, ContentValues values, String columnName, Object value) { BaseSQLiteHelperOrm db = new BaseAppSQLiteHelperOrm(); try { Dao dao = db.getDao(c); UpdateBuilder<T, Long> updateBuilder = dao.updateBuilder(); updateBuilder.where().eq(columnName, value); Set<Entry<String, Object>> valueSet = values.valueSet(); Iterator<Entry<String, Object>> it = valueSet.iterator(); while(it.hasNext()){ Entry<String, Object> valueEntry = it.next(); updateBuilder.updateColumnValue(valueEntry.getKey(), valueEntry.getValue()); } // for (String key : values.keySet()) { // updateBuilder.updateColumnValue(key, values.get(key)); // } return updateBuilder.update(); } catch (SQLException e) { } finally { if (db != null) db.close(); } return -1; } /** 更新一条记录 */ synchronized public int update(T po) { BaseSQLiteHelperOrm db = new BaseAppSQLiteHelperOrm(); try { Dao dao = db.getDao(po.getClass()); return dao.update(po); } catch (SQLException e) { } finally { if (db != null) db.close(); } return -1; } /** 创建或更新一条记录,如果指定id则更新 */ synchronized public int createOrUpdate(T po){ BaseSQLiteHelperOrm db = new BaseAppSQLiteHelperOrm(); try { Dao dao = db.getDao(po.getClass()); CreateOrUpdateStatus cous = dao.createOrUpdate(po); return cous.getNumLinesChanged(); } catch (SQLException e) { } finally { if (db != null) db.close(); } return -1; } /** 查询所有记录 */ synchronized public List<T> queryForAll(Class<T> c) { BaseSQLiteHelperOrm db = new BaseAppSQLiteHelperOrm(); try { Dao dao = db.getDao(c); return dao.queryForAll(); } catch (SQLException e) { } finally { if (db != null) db.close(); } return new ArrayList<T>(); } /**************************************************************************************************************** */ /** * 用 ACS 表示按正序排序(即:从小到大排序) */ public static final String ORDER_BY_ASC = " ASC"; /** * 用 DESC 表示按倒序排序(即:从大到小排序) */ public static final String ORDER_BY_DESC = " DESC"; /** * 满足特定条件并排序 * @param c * @param columnName1 * @param value1 * @param columnName2 * @param value2 * @param columnName * @param value * @return */ synchronized public List<T> queryFor2EqOrderBy(Class<T> c, String columnName1, Object value1, String columnName2, Integer value2, String columnName, Object value){ BaseSQLiteHelperOrm db = new BaseAppSQLiteHelperOrm(); try { Dao dao = db.getDao(c); QueryBuilder queryBuilder = dao.queryBuilder(); queryBuilder.where().eq(columnName1, value1).and().eq(columnName2, value2); queryBuilder.orderByRaw(columnName+value); return queryBuilder.query(); } catch (SQLException e) { } finally { if (db != null) db.close(); } return new ArrayList<T>(); } /** * 查询满足两个条件的数据 * @param c * @param columnName1 * @param value1 * @param columnName2 * @param value2 * @param columnName * @param value * @return */ synchronized public T queryFor2Eq(Class<T> c, String columnName1, Object value1, String columnName2, Object value2){ BaseSQLiteHelperOrm db = new BaseAppSQLiteHelperOrm(); try { Dao dao = db.getDao(c); QueryBuilder queryBuilder = dao.queryBuilder(); queryBuilder.where().eq(columnName1, value1).and().eq(columnName2, value2); List<T> ts = queryBuilder.query(); if(ts.size() >0){ return ts.get(0); } } catch (SQLException e) { } finally { if (db != null) db.close(); } return null; } //获取满足两个条件的list synchronized public List<T> queryFor2EqList(Class<T> c, String columnName1, Object value1, String columnName2, Object value2){ BaseSQLiteHelperOrm db = new BaseAppSQLiteHelperOrm(); try { Dao dao = db.getDao(c); QueryBuilder queryBuilder = dao.queryBuilder(); queryBuilder.where().eq(columnName1, value1).and().eq(columnName2, value2); return queryBuilder.query(); } catch (SQLException e) { } finally { if (db != null) db.close(); } return null; } /** * 模糊查询 * @param c * @param columnName1 * @param value1 * @param columnName2 * @param value2 * @return */ synchronized public List<T> queryFor2Like(Class<T> c, String columnName1, Object value1, String columnName2, Object value2){ BaseSQLiteHelperOrm db = new BaseAppSQLiteHelperOrm(); try { Dao dao = db.getDao(c); QueryBuilder queryBuilder = dao.queryBuilder(); queryBuilder.where().like(columnName1, "%"+value1+"%").or().like(columnName2, value2+"%"); return queryBuilder.query(); } catch (SQLException e) { } finally { if (db != null) db.close(); } return new ArrayList<T>(); } synchronized public List<T> queryOrderBy(Class<T> c, String columnName, Object value){ BaseSQLiteHelperOrm db = new BaseAppSQLiteHelperOrm(); try { Dao dao = db.getDao(c); QueryBuilder queryBuilder = dao.queryBuilder(); queryBuilder.orderByRaw(columnName+value); return queryBuilder.query(); } catch (SQLException e) { } finally { if (db != null) db.close(); } return new ArrayList<T>(); } /** * 删除满足指定条件的记录 * @param po * @param columnName * @param value * @return */ synchronized public int remove(Class<T> c, String columnName, Object value) { BaseSQLiteHelperOrm db = new BaseAppSQLiteHelperOrm(); try { Dao dao = db.getDao(c); DeleteBuilder del = dao.deleteBuilder(); del.where().eq(columnName, value); return del.delete(); } catch (SQLException e) { } finally { if (db != null) db.close(); } return -1; } /** * “两种条件同时满足”和“两种条件互换后同时满足”</br> * 中必须有一项成立的查询</br> * 并且排序后限制一项</br> * <p> * Where where = queryBuilder.where(); </br> * where.or( </br> * where.and(</br> * where.eq(Account.NAME_FIELD_NAME, "foo"), </br> * where.eq(Account.PASSWORD_FIELD_NAME, "_secret")</br> * ), </br> * where.and( </br> * where.eq(Account.NAME_FIELD_NAME, "bar"), </br> * where.eq(Account.PASSWORD_FIELD_NAME, "qwerty")</br> * ) </br> * ); </br> *</br> *This produces the following approximate SQL: </br> *SELECT * FROM account WHERE ((name = 'foo' AND passwd = '_secret') OR (name = 'bar' AND passwd = 'qwerty'))</br> * </p> * @param c * @param columnName1 * @param value1 * @param columnName2 * @param value2 * @param columnName * @param value * @return */ synchronized public List<T> queryForOrEqAndEqOrderByLimit(Class<T> c, String columnName1, Object value1, String columnName2, Object value2, String columnName, Object value,int limit) { BaseSQLiteHelperOrm db = new BaseAppSQLiteHelperOrm(); try { Dao dao = db.getDao(c); QueryBuilder queryBuilder = dao.queryBuilder(); Where where = queryBuilder.where(); where.or( where.and( where.eq(columnName1, value1), where.eq(columnName2, value2) ), where.and( where.eq(columnName1, value2), where.eq(columnName2, value1) ) ); queryBuilder.orderByRaw(columnName + value).limit(limit); return queryBuilder.query(); } catch (SQLException e) { } finally { if (db != null) db.close(); } return new ArrayList<T>(); } /** * 根据特定条件更新特定字段 * * @param c * @param values * @param columnName * where字段 * @param value * where值 * @return */ synchronized public int updatelist(Class<T> c, ContentValues values, String columnName, Object value,String columnName2, Object value2) { BaseSQLiteHelperOrm db = new BaseAppSQLiteHelperOrm(); try { Dao dao = db.getDao(c); UpdateBuilder<T, Long> updateBuilder = dao.updateBuilder(); updateBuilder.where().eq(columnName, value).and().eq(columnName2, value2); Set<Entry<String, Object>> valueSet = values.valueSet(); Iterator<Entry<String, Object>> it = valueSet.iterator(); while (it.hasNext()) { Entry<String, Object> valueEntry = it.next(); updateBuilder.updateColumnValue(valueEntry.getKey(), valueEntry.getValue()); } // for (String key : values.keySet()) { // updateBuilder.updateColumnValue(key, values.get(key)); // } return updateBuilder.update(); } catch (SQLException e) { } finally { if (db != null) db.close(); } return -1; } /** 查询满足不等于条件的记录并排序</br> * where fieldName <> value */ synchronized public List<T> queryForNeOrderBy(Class<T> c, String fieldName, Object value, String columnName, String order) { BaseSQLiteHelperOrm db = new BaseAppSQLiteHelperOrm(); try { Dao dao = db.getDao(c); QueryBuilder queryBuilder = dao.queryBuilder(); queryBuilder.where().ne(fieldName, value); queryBuilder.orderByRaw(columnName + order); return queryBuilder.query(); } catch (SQLException e) { } finally { if (db != null) db.close(); } return null; } /** * 根据特定条件查询 三种条件都满足 * @param c * @param columnName1 * @param value1 * @param columnName2 * @param value2 * @param columnName * @param value * @return */ synchronized public List<T> queryFor2EqOrderBy2(Class<T> c, String columnName1, Object value1, String columnName2, Object value2, String columnName, Object value) { BaseSQLiteHelperOrm db = new BaseAppSQLiteHelperOrm(); try { Dao dao = db.getDao(c); QueryBuilder queryBuilder = dao.queryBuilder(); queryBuilder.where().eq(columnName1, value1).and() .eq(columnName2, value2).and().eq(columnName, value); return queryBuilder.query(); } catch (SQLException e) { } finally { if (db != null) db.close(); } return new ArrayList<T>(); } }