我在从应用程序中删除SQLite文件时遇到问题。 我正在使用如下代码:
File file = new File("data/data/" + context.getPackageName() + "/databases/*****");
d = file.delete();
DbAdapter dba = new DbAdapter(context);
dba.open();
dba.close();
在此之前,我使用方法context.deleteDatabase(DATABASE_NAME)
来执行此操作。
问题是:运行此方法后,应用程序不刷新,我有旧数据库,我可以删除,插入等。
在这两种情况下,我都必须重新启动我的应用程序以查看新数据库。
有时,在运行该方法之后,当我尝试访问某些需要数据库的方法时,应用程序崩溃时出现错误,我没有数据库,重新启动后,将创建新数据库。
我该怎么办?
修改 我有一个很大的系统。我的数据库有26个表和很多约束。 删除数据库并重新创建它会更容易。
EDIT2
DbAdapter dba = new DbAdapter(context);
SQLiteDatabase sqlite = dba.open();
dba.close();
boolean d = context.deleteDatabase("CarroramaBD");
dba.open();
dba.close();
我确实关闭了数据库。
答案 0 :(得分:0)
为什么要这样做 相反,您可以删除数据库中的表并重新创建它们,这比删除文件更实用。
至于存储旧值的视图,您可以通过调用此代码来刷新整个活动
public void refrehs_me()
{
Intent intent = getIntent();
finish();
startActivity(intent);
}
编辑:关于新数据库的创建,我想到了一个想法,在创建应用程序时,将创建一个数据库文件,像DB2一样复制该文件,当你删除数据库而不是尝试创建一个新的只需将DB2作为DB复制回来,等等每个删除过程。
对于副本 - 这是@Rakshi的代码
public void copy(File src, File dst) throws IOException {
InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dst);
// Transfer bytes from in to out
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();
}