Android-指定路径创建 SQLite

前言

今天大佬让我把创建的数据库存储路径改为 SD 下,自信满满低改了结果崩溃,在此记录一下。

正文

我们创建数据库一般就是集成 SQLiteHelper ,在构造方法把 DB_NAME
传进入,就会默认在 data/data/<`package_name>/database/ 下创建,在里面的文件也相对有安全性,删除应用的时候也会一起删除掉。但是总会遇到不同的需求场景。然后今天我就躺了一下小坑。

找了一下很简单能找到 openOrCreateDatabase(…)这个方法,可以在指定路径下创建,就连 SQLiteHelper 本身也是调用他的,只不过把路径写死了。

然后我尝试了一下:

String path = Environment.getExternalStorageDirectory().getAbsolutePath()+"/AAA/aaa.db";
SQLiteDatabasemDb = SQLiteDatabase.openOrCreateDatabase(path ,null);

满心欢喜,结果,哎呀,报错了:

SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database

然后一想,没加权限。手动滑稽

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

结果还是报同一个错误。

墙外翻了翻,结果发现,这样子就成功了:

        String path = Environment.getExternalStorageDirectory().getAbsolutePath()+"/AAA";
        File pathFile = new File(path);
        File file = new File(path+"/aa.db");
        try{
            if(!pathFile.exists()){
                pathFile.mkdirs();
            }
            if(!file.exists()){
                file.createNewFile();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        mDb = SQLiteDatabase.openOrCreateDatabase(file,null);

也就是说调用 openOrCreateDatabase 时候,该路径下文件不存在的时候,不会默认帮我们创建,所以打不开数据库,因为没有这个数据库,只要手动创建了文件,然后就没问题了。

你可能感兴趣的:(报错集锦)