文章类型: ANDROID
关键词: unknown,error,code,14,Could,not,open,database
内容摘要: unknown error (code 14): Could not open database

使用OPEN_READWRITE出现unknown error (code 14): Could not open database的解决方案

2019/4/18 11:21:27    来源:apple    阅读:

在调用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" />


其实上面的都没有解决我的问题,我的问题主要出在了数据库的结构不符合android中数据库类SQLiteDatabase对数据库结构的要求,即由于使用SQLiteStudio工具开发的数据库,所以在创建数据库中的表中列的数据类型时使用了如:varchar、nvarchar等数据类型,但是SQLiteDatabase对数据库的要求中不能出现该中类型,查找了好多资料都没有解决我的问题,通过反复对比SQLiteDatabase类中通过SQL语句创建的数据库(此数据库打开时是正常的,没有出现如

标题所示的错误),发现了出现如标题所示错误的数据库在创建数据表中的列的数据类型有异样的情况,通过修改数据列的类型(如将varchar、nvarchar类型该为TEXT类型),解决了如标题所出现的错误。

在androidStudio工具中,如题所示的错误提示太粗略了,几乎很难排查出我的错误原因(网上给出的解决方法几乎全部试了一遍,没有解决),好辛苦,终于解决了该问题。

现给出Android中SQLite数据库的数据类型的链接地址介绍,Android中SQLite数据库的数据类型




↑ 上一篇文章:android studio将外部sqlite3数据库导入到Android项目中 关键词:android,studio,外部,sqlite3,数据.. 发布日期:2019/4/18 9:28:30
↓ 下一篇文章:Android中SQLite数据库的数据类型 关键词:Android,SQLite,数据库,数据类型 发布日期:2019/4/19 15:15:13
相关文章:
VC++ fatal error C1083: Cannot open include file msado15.tli': No such file or directory 关键词:VC++,fatal,error,C1083,Cannot,open,include,file,.. 发布日期:2016-08-10 11:25
eclipse Unknown error: Unable to build: the file dx.jar was not loaded from the SDK folder! 关键词:eclipse运行错误提示Unknown,error:,Unable,to,build:,the.. 发布日期:2017-09-21 17:22
SQLiteOpenHelper与SQLiteDatabase的使用 关键词:SQLiteOpenHelper,SQLiteDatabase,数据类型,使用 发布日期:2019-04-30 09:39
相关目录:.NETANDROID
我要评论
正在加载评论信息......