我尝试在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)的格式吗?
P.S。我强调这不是关于外部存储,而是关于可移动存储(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();
}
答案 0 :(得分:0)
首先尝试在SD卡上创建该目录。你会看到你不会成功。
Micro SD卡仅适用于现代Android版本。
除了一个特定于应用程序的目录。
如果你运气好的话。
尝试将数据库设为
/storage/sdcard1/Android/data/<packagename>/files/xAPP/inventory.db