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]); } } }
} }
</pre>