使用“SQLite 数据库浏览器”创建或编辑数据库后,android 无法打开数据库
Posted
技术标签:
【中文标题】使用“SQLite 数据库浏览器”创建或编辑数据库后,android 无法打开数据库【英文标题】:After create or edit database with "SQLite Database Browser" android can't to open database 【发布时间】:2017-02-26 15:48:52 【问题描述】:我想为我的 android 应用预先创建数据库。我使用“SQLite 数据库浏览器”,并在创建数据库后,将数据库复制到应用文件夹“databases”。在我的应用程序端,我添加了写入 sdcard 的权限(如果需要)
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
而我打开数据库的代码是:
String myPath = getApplicationContext().getFilesDir().getAbsolutePath().replace("files","databases")+ File.separator + "mydb.db";
db = SQLiteDatabase.openOrCreateDatabase(myPath, null);
Android 无法打开我的数据库并显示此错误:
android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
我尝试了以下方法:
我已经用Notepad++打开了数据库文件,并在文件头确认了SQL格式"SQLite format 3"。我已使用以下 SQL 语句从 "SQLite Database Browser" 中添加 "android_metadata" 表:
CREATE TABLE "android_metadata" ("locale" TEXT DEFAULT 'en_US');
INSERT INTO "android_metadata" VALUES ('en_US')
我尝试从 android 中删除我的数据库文件并运行我的应用程序以检查代码是否可以使用此名称创建数据库并且一切正常,创建数据库没有问题,之后我再次运行我的应用程序检查它是否可以打开数据库并打开没有问题。我已经使用 android 代码创建了我需要的所有表,在成功创建数据库后,我已将此文件复制回 Windows 并使用 "SQLite Database Browser" 打开以将少量数据插入表中并保存更改后,再次复制回android,但我的应用无法再次打开!
我很困惑,问题出在哪里?为什么如果我尝试使用 "SQLite Database Browser" android 编辑或创建数据库,它却无法打开它?
对不起我的英语......
*“SQLite 数据库浏览器”版本为 3.9.1
【问题讨论】:
如果你在 API >=23 中运行你的应用程序,那么你需要获得动态权限。你会得到这样的动态权限***.com/questions/39404356/… 是的,你是对的!谢谢!现在它正在工作!但是很奇怪,为什么android应用程序可以创建数据库文件并毫无问题地打开它,而如果您从“SQLite数据库浏览器”编辑或创建此文件却不能?很奇怪!再次感谢您! 【参考方案1】:请确保您的文件路径是否为空。首先你检查一下然后打开它
String myPath = getApplicationContext().getFilesDir().getAbsolutePath().replace("files","databases")+ File.separator + "mydb.db";
File file = new File(myPath);
if (file.exists() && !file.isDirectory())
db = SQLiteDatabase.openOrCreateDatabase(myPath, null);
else
Log.i(TAG, "Database file not found");
【讨论】:
该文件存在,但我尝试打开数据库时出现同样的错误。以上是关于使用“SQLite 数据库浏览器”创建或编辑数据库后,android 无法打开数据库的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android Studio 中显示来自 SQLite 数据库浏览器的图像?