以下是导入和导出SQLite数据库的工作方法。它的工作在除Android Pie外的所有android版本中都可以正常工作。当我尝试导入Android
Pie时,它显示成功的Toast,但未还原数据库。谁能帮我解决Android Pie(API 28)问题。
private void importDB() {
try {
File sd = Environment.getExternalStorageDirectory();
File cur_db_pat = new File(this.getDatabasePath(DATABASE_NAME).getAbsolutePath());
if (sd.canWrite()) {
String backupDBPath = bac_dir_nam +"/" + DATABASE_NAME;
File currentDB = new File(sd, backupDBPath);
FileChannel src = new FileInputStream(currentDB).getChannel();
FileChannel dst = new FileOutputStream(cur_db_pat).getChannel();
dst.transferFrom(src, 0, src.size());
src.close();
dst.close();
Toast.makeText(getBaseContext(), cur_db_pat.toString(),
Toast.LENGTH_LONG).show();
}
} catch (Exception e) {
Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG)
.show();
}
}
private void exportDB() {
try {
File sd = Environment.getExternalStorageDirectory();
File cur_db_pat = new File(this.getDatabasePath(DATABASE_NAME).getAbsolutePath());
if (sd.canWrite()) {
String backupDBPath = bac_dir_nam+"/" + DATABASE_NAME;
File backupDB = new File(sd, backupDBPath);
FileChannel src = new FileInputStream(cur_db_pat).getChannel();
FileChannel dst = new FileOutputStream(backupDB).getChannel();
dst.transferFrom(src, 0, src.size());
src.close();
dst.close();
Toast.makeText(getBaseContext(), backupDB.toString(),
Toast.LENGTH_LONG).show();
}
} catch (Exception e) {
Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG)
.show();
}
}
我对文件系统没有太多经验。因此,举个例子会很有帮助。
在Android Pie +中,SQLite已更改为默认设置,以使用通常更有效的预写日志记录( WAL )代替日记模式。
这样,将有两个与数据库同名的文件,但后缀为 -shm (共享内存文件)和 -wal ( 预
写日志),我认为它们的存在是导致此问题的原因。
SQLite使用的临时文件(请参阅2.2和2.3)
一种解决方法是使用SQliteDatabase disableWriteAheadLogging
方法禁用预写日志记录,而先前的html" target="_blank">方法将像以前一样工作,但日志效率较低。
另一个修复方法是在还原时删除这两个文件。为了避免潜在的损坏,必须在进行备份之前确保对数据库进行适当的检查。见PRAGMA检查站;
以下是还原时删除这两个文件的摘要(请注意,假定已使用足够的检查点进行了备份):
// Added for Android 9+ to delete shm and wal file if they exist
File dbshm = new File(dbfile.getPath() + "-shm");
File dbwal = new File(dbfile.getPath()+ "-wal");
if (dbshm.exists()) {
dbshm.delete();
}
if (dbwal.exists()) {
dbwal.delete();
}
另一个解决方法是另外备份并随后还原-shm和-wal文件。
您可能还希望考虑在导入/还原时重命名原始文件,在复制新文件后检查新文件的潜在好处(例如,使用 PRAGMA
integrity_check;),如果结果表明没有问题,则删除重命名的原始文件,否则删除导入的文件并将原始文件重命名为其原始名称,表明导入失败。
这可能是个愚蠢的问题,但我无论如何也无法解决。我有一个JavaScript文件,其中包含我想要导出的各种函数。 当我调用这个方法(使用mocha)时,我得到一条错误消息“export function AddNumbers(…numbers)Unexpected token export”。该项目构建为ES6。有人知道我做错了什么吗? 最好的问候,托斯顿
问题内容: 我正在尝试编写脚本来导入数据库文件。我编写了脚本来导出文件,如下所示: 现在,我希望能够导入该数据库。我试过了 : 但是我不允许执行多个语句。有没有办法让它直接运行SQL脚本? 问题答案: 文件资料。
我想在我的js文件中导入一个函数。下面是一个简单的代码: 谢谢
我尝试使用pg_dump命令导出PostgreSQL数据库(数据库名ari_company): 然后我得到了这个错误: 但当我运行默认数据库(postgres)时,它会工作并转储。sql被创建。使用命令
我试图通过drewnoakes导入元数据提取器库,从正在处理的图像中提取EXIF数据。通用域名格式。我尝试了两种可能的方法来导入库,但它仍然不起作用。 我所做的: 1) 将JAR文件拖放到我的草图中,并使用import语句import com。drew。*;但它仍在抱怨图书馆不存在。 2) 将JAR文件放在My Documents文件夹的Processing文件夹中,并使用“import libr
本文向大家介绍利用PL/SQL从Oracle数据库导出和导入数据,包括了利用PL/SQL从Oracle数据库导出和导入数据的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了使用PL/SQL从Oracle数据库导出和导入数据的方法,供大家参考,具体内容如下 1.导出数据: 方式一:工具—>导出用户对象—>导出.sql文件 注:这种方式导出的是建表语句和存储过程语句 方式二:工具—>导出表