博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android SQLite
阅读量:6758 次
发布时间:2019-06-26

本文共 6618 字,大约阅读时间需要 22 分钟。

  hot3.png

实现思路:

1)创建实体类/数据库模型.

2)封装数据操作

具体实现:

1)创建模型:

public class BaseBean implements Serializable {     ......    //具体属性根据业务确定}

2)创建数据库(DBHelper) + 数据库管理类(DBManager) + 数据库操作工具类(DBTools)

/** * Created by milo on 15/7/28. * 数据库辅助类 */public class DBHelper extends SQLiteOpenHelper {    private static final String DATABASE_NAME = "PictureAirGuide.db";    private static final int DATABASE_VERSION = 1;    private static DBHelper dbHelper;    public synchronized static DBHelper getInstance(Context context) {        if (dbHelper == null) {            LogUtil.i("DBHelper", "getInstance()" + "dbHelper == null");            dbHelper = new DBHelper(context);        }        return dbHelper;    }    public DBHelper(Context context) {        super(context, DATABASE_NAME, null, DATABASE_VERSION);        LogUtil.i("DBHelper", "DBHelper()");    }    @Override    public void onOpen(SQLiteDatabase db) {        super.onOpen(db);        // TODO 每次成功打开数据库后首先被执行        LogUtil.i("DBHelper", "onOpen()");    }    @Override    public void onCreate(SQLiteDatabase db) {        db.beginTransaction();        try {            LogUtil.i("DBHelper", "onCreate()");            //创建数据表            db.execSQL(".....");            db.setTransactionSuccessful();        } catch (Exception e) {            e.printStackTrace();        } finally {            db.endTransaction();        }    }    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {        //db.execSQL("ALTER TABLE picture ADD COLUMN uploadTime TEXT");        LogUtil.i("DBHelper", "onUpgrade()");    }}

/** * 线程安全并发操作数据库 * * @author milo */public class DBManager {    private static AtomicInteger mOpenCounter = new AtomicInteger();    private static DBManager dbManager;    private static DBHelper dbHelper;    private static SQLiteDatabase db;    public static synchronized void initializeInstance(DBHelper helper) {        if (dbManager == null) {            dbManager = new DBManager();            dbHelper = helper;        }    }    /**     * 获取DB     *     * @return     */    public static synchronized DBManager getInstance() {        if (dbManager == null) {            throw new IllegalStateException(DBManager.class.getSimpleName() +                    " is not initialized, call initializeInstance(..) method first.");        }        return dbManager;    }    /**     * 写入数据DB     *     * @return     */    public synchronized SQLiteDatabase writData() {        if (mOpenCounter.incrementAndGet() == 1) {            // Opening new database            db = dbHelper.getWritableDatabase();        }        return db;    }    /**     * 读取数据DB     *     * @return     */    public synchronized SQLiteDatabase readData() {        if (mOpenCounter.incrementAndGet() == 1) {            // Opening new database            //db = dbHelper.getReadableDatabase();            //API原文:This will be the same object returned by getWritableDatabase() unless some problem, such as a full disk, requires the database to be opened read-only.            db = dbHelper.getWritableDatabase();        }        return db;    }    /**     * 关闭DB     */    public synchronized void closeDatabase() {        if (mOpenCounter.decrementAndGet() == 0) {            // Closing database            db.close();        }    }    /**     * 删除DB     */    public synchronized void deleteDatabase(String DBName) {        if (db != null) {            // delete database            db.delete(DBName, null, null);        }    }    /**     * 删除所有DB     */    public synchronized void deleteAllDatabase() {        if (db != null) {            // delete all database            db.delete("", null, null);        }    }}

/** * Created by milo on 15/8/19. * DB增删改查工具类 */public class DBTools {    /**     * 添加数据     * replace 不存在添加、存在更新     *     * @param table         表名     * @param contentValues 值     */    public synchronized static void insert(String table, ContentValues contentValues) {        if (contentValues != null) {            SQLiteDatabase db = DBManager.getInstance().writData();            //使用事务提交            db.beginTransaction();            try {                DBManager.getInstance().writData().replace(table, null, contentValues);                db.setTransactionSuccessful();            } catch (Exception e) {                e.printStackTrace();            } finally {                db.endTransaction();            }            DBManager.getInstance().closeDatabase();//关闭DB        }    }    /**     * 添加数据     *     * @param table             表名     * @param contentValuesList 值     */    public synchronized static void insert(String table, List
 contentValuesList) {        if (contentValuesList != null && contentValuesList.size() > 0) {            SQLiteDatabase db = DBManager.getInstance().writData();            //使用事务提交            db.beginTransaction();            try {                for (ContentValues contentValues : contentValuesList) {                    DBManager.getInstance().writData().replace(table, null, contentValues);                }                db.setTransactionSuccessful();            } catch (Exception e) {                e.printStackTrace();            } finally {                db.endTransaction();            }            DBManager.getInstance().closeDatabase();//关闭DB        }    }    /**     * 修改数据     *     * @param table       表名     * @param values      修改后的值     * @param whereClause 修改条件     * @param whereArgs   修改的参数值     */    public synchronized static void update(String table, ContentValues values, String whereClause, String[] whereArgs) {        DBManager.getInstance().writData().update(table, values, whereClause, whereArgs);        DBManager.getInstance().closeDatabase();//关闭DB    }    /**     * 查询数据     *     * @param table         表名     * @param columns       要查询出来的列名,为 null 查询所有     * @param selection     查询条件,允许使用占位符"?"     * @param selectionArgs 对应于selection语句中占位符的值     * @param groupBy       分组     * @param having        过滤器     * @param orderBy       排序     * @param limit         限制查询返回的行数,     * @return Cursor 注意使用完要关闭     */    public static Cursor query(String table, String[] columns, String selection,                               String[] selectionArgs, String groupBy, String having,                               String orderBy, String limit) {        Cursor c = DBManager.getInstance().readData().query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit);//        DBManager.getInstance().closeDatabase();//关闭DB        //游标必须要在关闭数据库之前关闭,不能放在后面        return c;    }}

3)在实体类中对具体数据进行增删改查:

转载于:https://my.oschina.net/imeibi/blog/499373

你可能感兴趣的文章
阶段性放弃 wxPython 前的总结
查看>>
Fegla and the Bed Bugs 二分
查看>>
linux 文本处理
查看>>
swoole重启机制(转载)
查看>>
hadoop day 1
查看>>
HDU 1251 统计难题
查看>>
用javascript脚本实现微信定时发送信息
查看>>
MongoDB学习笔记(四) 用MongoDB的文档结构描述数据关系
查看>>
[Windows Azure] Data Management and Business Analytics
查看>>
java面试题07
查看>>
什么是面向对象思想
查看>>
Quick-cocos2d-x3.3 Study (十六)--------- 碰撞检测,事件监听,设置掩码
查看>>
tomcat 安装
查看>>
C#调用c++创建的dll
查看>>
12.02个人博客
查看>>
Notification通知代码简洁使用
查看>>
UIView 动画
查看>>
ssh加密公私钥
查看>>
快速部署Python应用:Nginx+uWSGI配置详解
查看>>
mybatis-generator生成数据对象
查看>>