我正在使用下面的代码来打开或创建一个sqlite数据库。该代码在一些手机上工作正常,但在Android P设备上却会出现下面的错误。
SQLiteDatabase myDB = null;
myDB = backup.this.openOrCreateDatabase(url[0], MODE_PRIVATE, null);
对数表
2019-11-14 07:49:56.204 10213-10363/com.gadha.garden E/SQLiteLog: (14) cannot open file at line 36667 of [c255889bd9]
2019-11-14 07:49:56.204 10213-10363/com.gadha.garden E/SQLiteLog: (14) os_unix.c:36667: (2) open(/sdcard/Download/2019-11-14 07-49-56 AM.db) -
2019-11-14 07:49:56.241 10213-10363/com.gadha.garden E/SQLiteDatabase: Failed to open database '/sdcard/Download/2019-11-14 07-49-56 AM.db'.
android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14 SQLITE_CANTOPEN): Could not open database
at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:211)
at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:195)
at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:503)
at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:204)
at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:196)
at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:880)
at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:865)
at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:766)
at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:772)
at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:757)
at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:306)
at com.gadha.garden.backup$backupRestore.doInBackground(backup.java:120)
at com.gadha.garden.backup$backupRestore.doInBackground(backup.java:108)
at android.os.AsyncTask$2.call(AsyncTask.java:333)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
2条答案
按热度按时间gcuhipw91#
考虑到你的评论
我正在尝试创建数据库。如何在创建数据库之前使用disableWriteAheadLogging?-
那么我相信你的问题是,你没有授予所需的权限,即使你说你有按照:-
添加了读和写权限。
您需要授予WRITE_EXTERNAL_STORAGE(这将隐式授予READ_EXTERNAL_STORAGE)。
对于设备API 23 + Android 6+而非9+,这需要通过MANIFEST授予权限,例如:-
示例
下面是一个简单的示例,boh复制了该问题,并显示授予权限可以纠正该问题。
通过以下方式请求用户权限(ExternalStoragePermissions.java):-
使用的活动(MainActivity.java)为:-
结果编号
首次运行时,应用程序显示:-
thtygnil2#
如果这对正在阅读本文的人无效,请确保您的数据库规则允许访问。检查“使用”选项卡,查看是否有访问数据库的失败尝试。