zoukankan      html  css  js  c++  java
  • android中仿dbutil的sqlite操作工具类

    不好用也不会放出来了,如果对sqllite使用jdbc的驱动来操作,那么使用apache的dbutils最好不过了,但要不想引入那么多的类,使用sqllite的原生操作,那么只引入下面两个类也基本可以了.

    import java.util.LinkedList;
    import java.util.List;
    import java.util.Map;
    
    import android.content.ContentValues;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    /**
     * sqlite的dao操作帮助类
     * 
     * @author weisir
     * 
     */
    
    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) {
            List<Map<String, String>> list = new LinkedList<Map<String, String>>();
    
            Cursor cursor = null;
            try {
                SQLiteDatabase database = DBOpenHelper.getWritableDatabase();
                cursor = database.query(tableName, cols, sqlWhere, sqlWhereArgs, null, null, null);
    
                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) {
            List<T> list = new LinkedList<T>();
    
            Cursor c = null;
            try {
    
                SQLiteDatabase database = DBOpenHelper.getWritableDatabase();
    
                c = database.rawQuery(sql, selectionArgs);
    
                while (c.moveToNext()) {
                    list.add(rp.process(c));
                }
            } catch (Exception e) {
                Logger.error("DAOHelper", "查询失败");
    
            } finally {
    
                if (null != c) {
                    c.close();
                }
            }
    
            return list;
        }
    
        //行处理接口
        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;
            }
    
        }
    }
  • 相关阅读:
    C#中属性和字段的区别
    利用原生态的(System.Web.Extensions)JavaScriptSerializer将mvc 前台提交到controller序列化复杂对象
    点击图片后放大居中显示
    Python logging模块
    MySQL免安装版 配置
    python 字符串 常用方法
    python 格式化输出
    欢迎使用CSDN-markdown编辑器
    Program received signal SIGSEGV, Segmentation fault.
    error MSB6006: “CL.exe”已退出,代码为 -1073741502。
  • 原文地址:https://www.cnblogs.com/weiwelcome0/p/3059285.html
Copyright © 2011-2022 走看看