android dbutils的简化版

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用
 
//复杂的可以使用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]);
}
}
}
  
}
}
 

标签: 数据库

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:java客户端模拟表单上传文件

下一篇:android开发,http工具类