加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

android dbutils的简化版

发布时间:2020-12-14 23:20:30 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 //复杂的可以使用dbutils的,这就来个仿dbutils的简化版的吧public class DAOHelper {public static final MapRowProcessor MAPROWPROCESSOR = new Ma

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

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

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读