是否可以导出可写数据库?我需要使用从手机的Visual Studio应用程序中导出的数据库作为系统的一部分。我知道这很糟糕,但这是我唯一可以完成我的项目的方法。这是我用来从SQLiteImporterExporter
库导出数据库的代码
public void exportDataBase(String path) {
InputStream myInput = null;
OutputStream myOutput = null;
try {
String inFileName = DB_PATH + DB_NAME;
myInput = new FileInputStream(inFileName);
String outFileName = path + DB_NAME;
myOutput = new FileOutputStream(outFileName);
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}
if (exportListener != null)
exportListener.onSuccess("Successfully Exported");
} catch (Exception e) {
if (exportListener != null)
exportListener.onFailure(e);
} finally {
try {
// Close the streams
myOutput.flush();
myOutput.close();
myInput.close();
} catch (Exception ex) {
if (exportListener != null)
exportListener.onFailure(ex);
}
}
}
答案 0 :(得分:0)
是否可以导出可写数据库?
在您的代码中,假设它正在工作,那么这就是您正在做的。还假定您要确保该数据库不在其他地方使用,并且已经关闭。
也就是说,SQLite数据库是一个文件,复制该文件,然后您可以在拥有SQLite的任何地方使用该数据库。可写/可读概念(即getWritableDatabase
v getReadableDatabase
)是较常见的误解之一。在大多数情况下,后者将获得可写数据库,如果该数据库也无法写入,则仅返回只读数据库。 (完整磁盘)。按照:-
创建和/或打开数据库。这将是返回的相同对象 通过getWritableDatabase()进行操作,除非出现某些问题,例如磁盘已满, 要求数据库以只读方式打开。在这种情况下, 将返回只读数据库对象。如果问题已解决,则 将来对getWritableDatabase()的调用可能会成功,在这种情况下, 只读数据库对象将关闭,而读/写对象 将来会退回。
例外情况/考虑因素是:-
在这种情况下,如果使用内存/临时表,并且如果需要这些内存/临时表,则可以创建一个副本数据库,但将内存/临时表更改为永久表。
在Android上,数据库中将有一个名为 android_metadata 的附加表,该表仅存储区域设置,可以在其他地方忽略。