日期:2014-05-16 浏览次数:20735 次
package cn.madfinger.android.core;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import org.json.JSONException;
import org.json.JSONObject;
import android.content.ContentValues;
import android.database.Cursor;
import android.util.Log;
import cn.madfinger.android.core.util.DateUtils;
import cn.madfinger.android.core.util.PageList;
import cn.madfinger.android.core.util.StrUtils;
import cn.madfinger.android.core.util.impl.PageListImpl;
/**
* 数据库操作基类
*
* @author wiley
*
* @param <T>
*/
public abstract class AbstractBaseDao<T extends AbstractBaseModel> {
protected static String TAG = AbstractBaseDao.class.getSimpleName();
private static Map<String, Integer> TYPES = new HashMap<String, Integer>();
public static final int TYPE_STRING=1;
public static final int TYPE_INTEGER=2;
public static final int TYPE_LONG=3;
public static final int TYPE_SHORT=4;
public static final int TYPE_FLOAT=5;
public static final int TYPE_DOUBLE=6;
static {
TYPES.put("date", TYPE_STRING);
TYPES.put("string", TYPE_STRING);
TYPES.put("integer", TYPE_INTEGER);
TYPES.put("int", TYPE_INTEGER);
TYPES.put("long", TYPE_LONG);
TYPES.put("short", TYPE_SHORT);
TYPES.put("float", TYPE_FLOAT);
TYPES.put("double", TYPE_DOUBLE);
}
//protected SQLiteDatabase dbHandler;
protected SqliteHelper sqliteHelper;
public AbstractBaseDao() {
}
public void setSqliteHelper(SqliteHelper sqliteHelper) {
this.sqliteHelper = sqliteHelper;
}
public long getCount(){
return getCount(null, null, null, null);
}
public long getCount(String selection, String[] selectionArgs){
return getCount(selection, selectionArgs, null, null);
}
public long getCount(String selection, String[] selectionArgs,String groupBy, String having){
String sqlString="SELECT COUNT(*) AS NUM FROM "+this.getEntityClass().getSimpleName();
if(!StrUtils.isEmpty(selection)){
sqlString+=" "+selection;
}
if(!StrUtils.isEmpty(groupBy)){
sqlString+=" "+groupBy;
if(!StrUtils.isEmpty(having)){sqlString+=having;}
}
Cursor cursor=this.execSql(sqlString,selectionArgs);
cursor.moveToFirst();
return cursor.getLong(0);
}
public PageList<Map<String, Object>> queryPageList(String[] columns,int pageNum, int maxPerPage){
return queryPageList(columns, null, null, null, null, null, pageNum, maxPerPage);
}
public PageList<Map<String, Object>> queryPageList(String[] columns,String selection, String[] selectionArgs,int pageNum, int maxPerPage){
return queryPageList(columns, selection, selectionArgs, null, null, null, pageNum, maxPerPage);
}
public PageList<Map<String, Object>> queryPageList(String[] columns,String selection, String[] selectionArgs,String orderBy,int pageNum, int maxPerPage){
return queryPageList(columns, selection, selectionArgs, null, null, orderBy, pageNum, maxPerPage);
}
public PageList<Map<String, Object>> queryPageList(String[] columns,String selection, String[] selectionArgs,String groupBy, String having, String orderBy,int pageNum, int maxPerPage){
long recordCount=getCount(selection,selectionArgs,groupBy,having);
PageListImpl<Map<String, Object>> page = new PageListImpl<Map<String, Object>>();
page.calculatePageInfo(pageNum, maxPerPage, recordCount);
Cursor cursor=sqliteHelper.getReaderHandler().query(this.getEntityClass().getSimpleName(), columns, selection, selectionArgs, groupBy, having, orderBy,maxPerPage+","+page.getStartRecordNum());
List<Map<String, Object>> list=cursor2List(cursor,columns);
page.setDataList(list);
return page;
}
public PageList