zoukankan      html  css  js  c++  java
  • Android GreenDao清空数据库的方法

    最近在做项目的时候,为了方便测试人员测试,在应用中加入正式库和测试库切换的功能。为了防止正式库和测试库切换带来的数据冲突,切换的时候必须把当前的数据库清空。代码如下:

    package com.example.admin.greendaotest;
     
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import com.greendao.gen.DaoMaster;
    import org.greenrobot.greendao.database.Database;
    /**
     * Created by admin on 2017/9/19.
     */
     
    public class DBManager {
        private final static String dbName = "student_db";
        private static DBManager mInstance;
        private DaoMaster.OpenHelper openHelper;
        private Context context;
     
        public DBManager(Context context) {
            this.context = context;
            openHelper = new DaoMaster.OpenHelper(context, dbName, null){};
        }
     
        /**
         * 获取单例引用
         *
         * @param context
         * @return
         */
        public static DBManager getInstance(Context context) {
            if (mInstance == null) {
                synchronized (DBManager.class) {
                    if (mInstance == null) {
                        mInstance = new DBManager(context);
                    }
                }
            }
            return mInstance;
        }
     
        /**
         * 获取可读数据库
         */
        private SQLiteDatabase getReadableDatabase() {
            if (openHelper == null) {
                openHelper = new MySQLiteOpenHelper(context, dbName, null);
            }
            SQLiteDatabase db = openHelper.getReadableDatabase();
            return db;
        }
     
        /**
         * 获取可写数据库
         */
        private SQLiteDatabase getWritableDatabase() {
            if (openHelper == null) {
                openHelper = new MySQLiteOpenHelper(context, dbName, null);
            }
            SQLiteDatabase db = openHelper.getWritableDatabase();
            return db;
        }
        public void deleSQL(){
            SQLiteDatabase db=getWritableDatabase();
            DaoMaster daoMaster = new DaoMaster(db);
            DaoMaster.dropAllTables(daoMaster.getDatabase(),true);
            DaoMaster.createAllTables(daoMaster.getDatabase(),true);
     
        }
        class MySQLiteOpenHelper extends DaoMaster.OpenHelper{
     
            @Override
            public void onCreate(Database db) {
                super.onCreate(db);
            }
     
            public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) {
                super(context, name, factory);
            }
        }
     
    }

    必须要加上DaoMaster.createAllTables(daoMaster.getDatabase(),true),不然重新进行数据库操作的时候(crud)会报找不到数据库表的错误:Caused by: android.database.sqlite.SQLiteException: no such table: 表名 ,至于为什么不会重新创建数据库表,我也不知道为啥,在这上面也浪费了一些时间,所以写下这篇博客。

  • 相关阅读:
    C++ 把输出结果写入文件/从文件中读取数据
    转载:C++之高精度算法
    借助bool判断使冒泡排序效率提高
    启程
    2017总结,2018的路
    mysql 分组排序
    2021年VS2019最新有效的调试ASP.NET Core源码
    神级Java程序员 开车教你基础开发,最简单 微型Java Web框架
    手把手教你 基础 整合最优雅SSM框架:SpringMVC + Spring
    学习Java绝对要懂的,Java编程中最常用的几种排序算法!
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/9318446.html
Copyright © 2011-2022 走看看