android dbutils的簡化版

ygw3 9年前發布 | 1K 次閱讀 Java

 
//復雜的可以使用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>

 本文由用戶 ygw3 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!