数据库代理
2016-02-19 17:42
323 查看
数据库代理,根据传递的字节码解析,数据库的连接暂未使用享元和数据库池优化
/** * Descroption: * Created by hjh on 2016/1/19. */ public class DBProxy{ private static Map<Class, org.hjh.db.BaseDao> map = new HashMap<>(); private static BaseDao baseDao = null; private static DBProxy instance; public static Context context; public static void init(Context x){ context = x; } public static void clearAll(){ map.clear(); } public static synchronized DBProxy getInstance(Class clazz){ if(map.get(clazz) == null){ baseDao = new BaseDao(context,DBManager.getInstance(context, "xx").openSystemDatabase(),false,clazz) { @Override public String getTableName() { return super.getTableName(); } }; map.put(clazz,baseDao); }else{ baseDao = map.get(clazz); } if(instance == null){ instance = new DBProxy(); } return instance; } /** * 使用前需要打开数据库 */ private void openCurrentDataBase () { baseDao.openDataBase(DBManager.getInstance(context, "xx").openSystemDatabase(), false); } /** * 插入数据 * @param bean */ public void insert(Serializable bean ){ if(bean == null){ return; } openCurrentDataBase(); baseDao.save(bean); } public void insertList(List<Serializable> list){ if(list == null){ return; } for(Serializable item : list){ insert(item); } } /** * 按条件删除产品,key ,value顺序需要一致 * */ public int deleteByCondition(String [] keys,String[] values) { if(keys == null)return 0; StringBuilder builder = new StringBuilder(); for(int index = 0; index < keys.length; index ++){ if(index == 0){ builder.append(keys[index]+"=?"); }else { builder.append(" and "+ keys[index]+ "=?"); } } openCurrentDataBase(); return baseDao.removeByCondition(builder.toString(), values); } /** * 删除某表的所有数据 */ public void deleteAll(){ openCurrentDataBase(); baseDao.removeBySQL("delete from " + baseDao.getTableName()); } /** * 根据主键跟新,可被 update替换 * @param primaryKeyValue 主键值 * @param params */ public void updateByPrimaryKey(String primaryKeyValue, Map<String,Object> params) { openCurrentDataBase(); ContentValues contentValues = new ContentValues(); for (String key : params.keySet()) { Object object = params.get(key); if(object instanceof String){ contentValues.put(key, (String)params.get(key)); }else if(object instanceof Boolean){ contentValues.put(key, (Boolean)params.get(key)); }else if (object instanceof Float){ contentValues.put(key, (Float)params.get(key)); }else if (object instanceof Integer){ contentValues.put(key, (Integer)params.get(key)); }else if (object instanceof Double){ contentValues.put(key, (Double)params.get(key)); } } baseDao.updateByPrimaryKey(primaryKeyValue, contentValues); } /** * 更新 * @param values 筛选条件值 * @param params 跟新的参数 * @param keys 跟新条件key 例如: fromSubId=? */ public void update(String[] keys,String[] values,Map<String,Object> params) { openCurrentDataBase(); ContentValues contentValues = new ContentValues(); for (String key : params.keySet()) { Object object = params.get(key); if(object instanceof String){ contentValues.put(key, (String)params.get(key)); }else if(object instanceof Boolean){ contentValues.put(key, (Boolean)params.get(key)); }else if (object instanceof Float){ contentValues.put(key, (Float)params.get(key)); }else if (object instanceof Integer){ contentValues.put(key, (Integer)params.get(key)); }else if (object instanceof Double){ contentValues.put(key, (Double)params.get(key)); }else if (object instanceof Long){ contentValues.put(key, (Long)params.get(key)); } } StringBuilder builder = new StringBuilder(); for(int index = 0; index < keys.length; index ++){ if(index == 0){ builder.append(keys[index]+"=?"); }else { builder.append(" and "+ keys[index]+ "=?"); } } baseDao.update(contentValues, builder.toString(), values); } public void upDate(Serializable entity) { openCurrentDataBase(); baseDao.upDate(entity); } /**查找数量*/ public Long queryCount(String[] keys,String[] values) { openCurrentDataBase(); StringBuilder builder = new StringBuilder(); for(int index = 0; index < keys.length; index ++){ if(index == 0){ builder.append(keys[index]+"=?"); }else { builder.append(" and "+ keys[index]+ "=?"); } } return baseDao.getCount( "select count(*) from " + baseDao.getTableName() + " where " + builder.toString(), values); } /** * 查询某表的所有数据 * @return */ public List<Serializable> queryAll(){ openCurrentDataBase(); List<Serializable> list = baseDao.queryPageData("select * from " + baseDao.getTableName(), null); return list; } //m默认降序 public List<Serializable> queryPageBySort(String sortKey,String[] keys,String[]values){ return queryPageBySort(sortKey,keys,values,2); } /** * 按顺序获取 * @param keys 查找条件 * @param values 最后2个value代表查找的下标和一页的数量,条件中不需要,下标计算int fromIndex = (pageNum - 1) * pageSize; * @param sortType 排序类型 1:升序,2:降序 * @param sortKey 排序的key * @return */ public List<Serializable> queryPageBySort(String sortKey,String[] keys,String[]values,int sortType) { openCurrentDataBase(); String sortStr = sortType == 1 ? "asc": "desc"; StringBuilder builder = new StringBuilder(); for(int index = 0; index < keys.length; index ++){ if(index == 0){ builder.append(keys[index]+"=?"); }else {// builder.append(" and "+ keys[index]+ "=?"); } } //limit 5 offset 3也是分页查找句获取5条记录,跳过前面3条记录 List<Serializable> list = baseDao.queryPageData( "select * from " + baseDao.getTableName() + " where " + builder.toString() + " order by " + sortKey + " " + sortStr + " limit ? , ? ", values); return list; } /** * 条件或查询 * @param sortKey * @param orkeys 需要查找的字段名 * @param text 查询的内容 * @param values 分页的限制条件,下标和数量 * @param sortType * @return */ public List<Serializable> queryBySearch(String sortKey,String[] andkeys,String[] orkeys,String text, String[]values,int sortType){ openCurrentDataBase(); String sortStr = sortType == 1 ? "asc": "desc"; StringBuilder builder = new StringBuilder(); for(int index = 0; index < andkeys.length; index ++){ if (index == 0) { builder.append(andkeys[index] + "=?"); } else {// builder.append(" and " + andkeys[index] + "=?"); } } if(!builder.toString().isEmpty()) {//非空 builder.append(" and ("); } for(int index = 0; index < orkeys.length; index ++){ if (index == 0) { builder.append(orkeys[index] + " glob '*" + text + "*'"); } else {// builder.append(" or " + orkeys[index] + " glob '*" + text + "*')"); } } //limit 5 offset 3也是分页查找句获取5条记录,跳过前面3条记录 List<Serializable> list = baseDao.queryPageData( "select * from " + baseDao.getTableName() + " where " + builder.toString() + " order by " + sortKey + " " + sortStr + " limit ? , ? ", values); return list; } /** * 按条件获取对象 * @param keys * @param values * @return */ public Serializable queryObject(String[] keys,String[]values){ openCurrentDataBase(); StringBuilder builder = new StringBuilder(); for(int index = 0; index < keys.length; index ++){ if(index == 0){ builder.append(keys[index]+"=?"); }else {// builder.append(" and "+ keys[index]+ "=?"); } } return baseDao.queryForObject("select * from " + baseDao.getTableName() + " where " + builder.toString(), values); } /** * 根据条件查找是否存在 * @param keys * @param values * @return */ public boolean isExist(String[] keys,String[]values){ openCurrentDataBase(); StringBuilder builder = new StringBuilder(); for(int index = 0; index < keys.length; index ++){ if(index == 0){ builder.append(keys[index]+"=?"); }else {// builder.append(" and "+ keys[index]+ "=?"); } } return baseDao.isExistsBySQL("select count(*) from " + baseDao.getTableName() + " where " + builder.toString(), values); } }
相关文章推荐
- MySQL 存储过程和函数
- MySQL知识(四)——运算符
- Mysql 查询当前数据上一条和下一条的记录
- Sql server中cursor的使用
- sql笔记-postgreSQL
- mysql 时间差问题集锦
- mysql数据优化方案
- redis单机搭建--详细
- 对json数据进行类似sql查询
- Nginx+Tomcat+Redis+NFS搭建服务器集群
- SQL Server ->> Enable Instant File Initialization(开启文件及时初始化)
- 解决OracleRAC集群下创建SDE时报Stored procedures错误问题
- MySql命令
- redis3.0.0 集群安装详细步骤
- VS 2008 打开SDF数据库文件
- oracle优化:避免全表扫描
- MongoDB:逐渐变得无关紧要
- innodb快照读取
- 【转载】SQL Server 2008 r2 中 SQL语句中单引号转义
- 错误 1130: Host '***.***.***.***' is not allowed to connect to this MySQL