| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
ygw3
10年前发布

android dbutils的简化版

   //复杂的可以使用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]);  }  }  }      }  }