如何在Android中删除SqLite文件?

时间:2014-02-18 13:17:07

标签: android sqlite android-sqlite

我在从应用程序中删除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();

我确实关闭了数据库。

1 个答案:

答案 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();
}