Android-指定路径创建 SQLite

来源:互联网 发布:迅雷端口被屏蔽 编辑:程序博客网 时间:2024/06/04 19:07

前言

今天大佬让我把创建的数据库存储路径改为 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.mkdir();            }            if(!file.exists()){                file.createNewFile();            }        } catch (IOException e) {            e.printStackTrace();        }        mDb = SQLiteDatabase.openOrCreateDatabase(s,null);

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

原创粉丝点击