清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
//复杂的可以使用dbutils的,这就来个仿dbutils的简化版的吧
public class DAOHelper {
public static final MapRowProcessor MAPROWPROCESSOR = new MapRowProcessor();
private String tableName; //表名
private String[] cols; //列名
public DAOHelper(String tableName, String[] columns) {
this.tableName = tableName;
this.cols = columns;
}
public List<Map<String, String>> query(String sqlWhere) {
return query(sqlWhere,null);
}
public List<Map<String, String>> query(String sqlWhere,String[] sqlWhereArgs) {
ArrayList<Map<String, String>> list = new ArrayList<Map<String, String>>(0);
Cursor cursor = null;
try {
SQLiteDatabase database = DBOpenHelper.getWritableDatabase();
cursor = database.query(tableName, cols, sqlWhere, sqlWhereArgs, null, null, null);
list.ensureCapacity(cursor.getCount());
while (cursor.moveToNext()) {
list.add(MAPROWPROCESSOR.process(cursor));
}
} catch (Exception e) {
Logger.error("DAOHelper", "插入失败");
} finally {
if (null != cursor) {
cursor.close();
}
}
return list;
}
public int insert(List<Map<String, String>> list) {
SQLiteDatabase database = DBOpenHelper.getWritableDatabase();
try {
// 打开数据库
database.beginTransaction();
for (Map<String, String> map : list) {
ContentValues v = mapToContentValues(map);
database.insert(tableName, null, v);
if (v != null) {
v.clear();
v = null;
}
}
// 设置事务成功.
database.setTransactionSuccessful();
return list.size();
} catch (Exception e) {
Logger.error("DAOHelper", "插入失败");
return -1;
} finally {
database.endTransaction();
}
}
public int delete(String sqlWhere) {
SQLiteDatabase database = DBOpenHelper.getWritableDatabase();
try {
// 打开数据库
database.beginTransaction();
// 设置事务成功.
int rowCount = database.delete(tableName, sqlWhere, null);
database.setTransactionSuccessful();
return rowCount;
} catch (Exception e) {
Logger.error("DAOHelper", "删除失败");
return -1;
} finally {
database.endTransaction();
}
}
private ContentValues mapToContentValues(Map<String, String> map) {
ContentValues values = new ContentValues();
for (String col : cols) {
values.put(col, map.get(col));
}
return values;
}
static public void clear(List<Map<String, String>> list) {
if (null == list) {
return;
}
for (Map<String, String> map : list) {
if (null != map) {
map.clear();
}
}
list.clear();
}
/**
* 查询得到列表
*
* @param sql
* 完整的select语句,可包含?,但不能用;结尾
* @param selectionArgs
* 查询参数
* @param rp
* 每行的处理,可使用DAOHelper.MAPROWPROCESSOR
* @return
*/
static public <T> List<T> query(String sql, String[] selectionArgs, RowProcessor<T> rp) {
ArrayList<T> list = new ArrayList<T>(0);
Cursor c = null;
try {
SQLiteDatabase database = DBOpenHelper.getWritableDatabase();
c = database.rawQuery(sql, selectionArgs);
list.ensureCapacity(c.getCount());
while (c.moveToNext()) {
list.add(rp.process(c));
}
} catch (Exception e) {
e.printStackTrace();
Logger.error("DAOHelper", "查询失败\\n"+e);
} finally {
if (null != c) {
c.close();
}
}
return list;
}
static public int count(String sql, String[] selectionArgs) {
Cursor c = null;
try {
SQLiteDatabase database = DBOpenHelper.getWritableDatabase();
c = database.rawQuery(sql, selectionArgs);
return c.getCount();
} catch (Exception e) {
e.printStackTrace();
Logger.error("DAOHelper", "查询失败\\n"+e);
} finally {
if (null != c) {
c.close();
}
}
return 0;
}
//行处理接口
public interface RowProcessor<T> {
T process(Cursor c);
}
//将每行处理成Map<String,String>结构
static public class MapRowProcessor implements RowProcessor<Map<String,String>> {
@Override
public Map<String,String> process(Cursor c) {
Map<String,String> map = new CaseInsensitiveMap<String>();
String[] columns = c.getColumnNames();
for (String col : columns) {
map.put(col, c.getString(c.getColumnIndex(col)));
}
return map;
}
}
//将每行处理成String结构
static public class StringRowProcessor implements RowProcessor<String> {
private String[] fields;
private String joinner;
private volatile int[] fldIdx = null;
public StringRowProcessor(){
this.fields = null;
this.joinner = ",";
}
public StringRowProcessor(String[] fields,String joinner){
this.fields = fields;
if(null != joinner){
this.joinner = joinner;
}
}
public StringRowProcessor(int[] fieldIndex,String joinner){
fldIdx = fieldIndex;
if(null != joinner){
this.joinner = joinner;
}
}
@Override
public String process(Cursor c) {
if(null == fldIdx){
initFldIdx(c);
}
StringBuilder builder = new StringBuilder();
for(int i = 0,n = fldIdx.length; i < n; i ++){
builder.append(c.getString(fldIdx[i]));
if(i < n -1){
builder.append(joinner);
}
}
return builder.toString();
}
private void initFldIdx(Cursor c) {
if(null == fields){
for(int i = 0,n = c.getColumnCount(); i < n ; i ++ ){
fldIdx[i] = i;
}
}else{
for(int i = 0, n = fields.length; i < n; i ++){
fldIdx[i] = c.getColumnIndex(fields[i]);
}
}
}
}
}