您的位置:首页 > 数据库

数据库代理

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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: