【发布时间】:2017-11-30 11:23:07
【问题描述】:
我尝试在 SD 卡上创建数据库,当我调用 getReadableDatabase () 时,我得到了
Failed to open database '/storage/sdcard1/xAPP/inventory.db'.
android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database.
如果我手动将数据库放入SD卡,会出现如下错误:
Failed to open database '/storage/sdcard1/xAPP/inventory.db'.
android.database.sqlite.SQLiteException: not an error (code 0): Could not open the database in read/write mode.
为什么?内部存储和外部存储都没有这样的问题。问题可能出在 SD 卡文件系统 (FAT32) 的格式上吗?
附:我强调这不是关于外部存储,而是关于可移动存储(SD卡)!如果我使用 Environment.getExternalStorageDirectory() 一切正常!
UPD1 创建数据库:
private InventoryDBHelper(Context context) {
super(context, Settings.getInstance().getSDCardDir()
+ File.separator + "xAPP"
+ File.separator + DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// date text yyyy-MM-dd HH:mm:ss
String sql = String
.format("CREATE TABLE %s (_key INTEGER PRIMARY KEY, ProductId TEXT, ProductName TEXT, Price DOUBLE, Cost DOUBLE, DateModified TEXT);",
TABLE_INVENTORY);
db.execSQL(sql);
sql = String
.format("CREATE TABLE %s (ProductId INTEGER, ProductQuantity INTEGER);",
TABLE_QUANTITY);
db.execSQL(sql);
}
UPD2:我必须重新打开问题,因为这仅在调试模式下有效,甚至并非总是如此!
如果我得到如下目录,UPD3 可以工作:
File[] dbDirs = ContextCompat.getExternalFilesDirs(context, null);
if (dbDirs[1] != null) {
return dbDirs[1].getAbsolutePath();
} else {
return dbDirs[0].getAbsolutePath();
}
【问题讨论】:
-
你是如何创建数据库的?请向我们展示您的代码
-
请参阅 UPD1
-
我强调这不是关于外部存储,而是关于可移动存储(SD卡)!如果我使用 Environment.getExternalStorageDirectory() 一切正常!
标签: android android-sqlite android-sdcard