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;
        }

    }
}

 

posted @ 2013-05-04 11:43  weiwelcome0  阅读(2102)  评论(0编辑  收藏  举报