Android greendao将数据库存在SD卡

来源:互联网 发布:ubuntu源无法更新 编辑:程序博客网 时间:2024/05/22 09:43

重写OpenHelper 和DevOpenHelper 类中的方法

public static abstract class OpenHelper extends SQLiteOpenHelper {        public OpenHelper(Context context, String name, CursorFactory factory) {            //super(context, name, factory, SCHEMA_VERSION);            super(new ContextWrapper(context) {                /**                 * 获得数据库路径,如果不存在,则创建对象对象                 *                  * @param name                 */                @Override                public File getDatabasePath(String name) {                    // 判断是否存在sd卡                    boolean sdExist = android.os.Environment.MEDIA_MOUNTED.equals(android.os.Environment.getExternalStorageState());                    if (!sdExist) {// 如果不存在,                        Log.e("SD卡管理:", "SD卡不存在,请加载SD卡");                        return null;                    } else {// 如果存在                        // 获取sd卡路径                        String dbMainDir = Constants.DATABASE_DIR;                        String dbPath = dbMainDir + name;// 数据库路径                        String dpdir = dbPath.substring(0, dbPath.lastIndexOf(File.separator));                        Debug.e("    dbPath 数据库 dpdir " + dpdir + "    dbPath:" + dbPath);                        // 判断目录是否存在,不存在则创建该目录                        File dirFile = new File(dpdir);                        if (!dirFile.exists()) {                            boolean dir = dirFile.mkdirs();                            Debug.e("    数据库目录创建失败 " + dir + "    dbPath:" + dbPath);                        }                        // 数据库文件是否创建成功                        boolean isFileCreateSuccess = false;                        // 判断文件是否存在,不存在则创建该文件                        File dbFile = new File(dbPath);                        if (!dbFile.exists()) {                            try {                                isFileCreateSuccess = dbFile.createNewFile();// 创建文件                            } catch (IOException e) {                                e.printStackTrace();                                Debug.e("数据库创建失败 " + e.toString());                            }                        } else {                            isFileCreateSuccess = true;                        }                        Debug.e(" 返回数据库文件对象 " + isFileCreateSuccess);                        // 返回数据库文件对象                        if (isFileCreateSuccess)                            return dbFile;                        else                            return super.getDatabasePath(name);                    }                }                /**                 * 重载这个方法,是用来打开SD卡上的数据库的,android 2.3及以下会调用这个方法。                 *                 * @param name                 * @param mode                 * @param factory                 */                @Override                public SQLiteDatabase openOrCreateDatabase(String name, int mode, CursorFactory factory) {                    return SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), null);                }                /**                 * Android 4.0会调用此方法获取数据库。                 *                 * @see ContextWrapper#openOrCreateDatabase(String,                 *      int,                 *      CursorFactory,                 *      DatabaseErrorHandler)                 * @param name                 * @param mode                 * @param factory                 * @param errorHandler                 */                @Override                public SQLiteDatabase openOrCreateDatabase(String name, int mode, CursorFactory factory, DatabaseErrorHandler errorHandler) {                    return SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), null);                }            }, name, factory, SCHEMA_VERSION);        }        @Override        public void onCreate(SQLiteDatabase db) {            Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION);            createAllTables(db, false);        }    }  /* WARNING: Drops all table on Upgrade! Use only during development. */    public static class DevOpenHelper extends OpenHelper {        public DevOpenHelper(Context context, String name, CursorFactory factory) {            super(context, name, factory);        }        @Override        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {            Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables");            dropAllTables(db, true);            onCreate(db);        }    }
原创粉丝点击