Android sqlite unknown error (code 14): Could not open database

来源:互联网 发布:360卸载找不到软件 编辑:程序博客网 时间:2024/05/20 02:26
在调用SQLiteDatabase类的静态方法openOrCreateDatabase时传入的路径参数必须为绝对路径。
这与Activity/ContextThemeWrapper类的openOrCreateDatabase不同。

后者中传入的路径参数为文件名.db,其默认存放在/data/data/包名/databases下,而前者则必须指定绝对路径,若像后者那样直接传入文件名,不仅不能直接保存在/data/data/包名/databases下,还会被理解为直接在根目录保存文件而引发异常。

//直接保存在默认内置存储内 //用Activity.openOrCreateDatabase实现 SQLiteDatabase database; database=MainActivity.this.openOrCreateDatabase("data.db",MODE_PRIVATE,null); //直接保存在默认内置存储内 //用SQLiteDatabase.openOrCreateDatabase实现 SQLiteDatabase database; String dirPath="/data/data/"+MainActivity.this.getPackageName()+"/databases/"; database=SQLiteDatabase.openOrCreateDatabase(dirPath+"data.db",null); //直接保存在外置存储内 //用SQLiteDatabase.openOrCreateDatabase实现 SQLiteDatabase database; String dirPath=Environment.getExternalStorageDirectory().getAbsolutePath()+“/aaa/”; //判断外置存储状态 if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) database=SQLiteDatabase.openOrCreateDatabase(dirPath+"data.db",null);
注意:用SQLiteDatabase.openOrCreateDatabase创建数据库前,如果数据库文件.db是存储在未创建的目录下,仍要新建目录,否则也会抛出异常Could not open database

//dirPath是文件夹路径名,不包含文件名,如/storage/emulated/0/aaa String dirPath=Environment.getExternalStorageDirectory().getAbsolutePath()+“/aaa/”; File dir=new File(dirPath); if(!dir.exists()) dir.mkdirs(); SQLiteDatabase database=SQLiteDatabase.openOrCreateDatabase(dirPath+"data.db",null);
最后确保AndroidManifest.xml相关权限的填写
例如:在外置存储读写的权限

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




阅读全文
0 0
原创粉丝点击