Flaky SQLite实现 - 如何改进?

时间:2011-03-06 00:49:34

标签: android sqlite

我的应用程序在很大程度上依赖于数据库,在首次打开应用程序时,将自身从/assets/文件夹复制到数据库存储。然而,它似乎是令人难以置信的气质:例如我在我的免费和付费版本中几乎完全相同的代码,但一个目前正在工作,另一个不是。

请问您看看我的代码并查看最新/可以改进的内容吗?我的SQLiteOpenHelper可以找到here,而onCreate()的{​​{1}}方法位于以下位置:

DataProvider

谢谢!

修改

在使用模拟器后,我知道数据库存在,但由于某种原因它只是不想读它...

2 个答案:

答案 0 :(得分:1)

下面是我用来复制数据库的代码(不确定它是否可以纠正错误,认为另一种方法总是值得一试)。否则,我没有看到任何可能导致错误的跳出来。

void copyFile(File src, File dst) throws IOException {
        FileChannel inChannel = new FileInputStream(src).getChannel();
        FileChannel outChannel = new FileOutputStream(dst).getChannel();
        try {
           inChannel.transferTo(0, inChannel.size(), outChannel);
        } finally {
           if (inChannel != null)
              inChannel.close();
           if (outChannel != null)
              outChannel.close();
        }
     }

另外想一想,为什么在检查数据库是否存在时打开和关闭数据库。看起来你可以逃避这样的事情:

private boolean checkDataBase() {
    String myPath = DB_PATH + DB_NAME;
    return new File(myPath).exists();
}

答案 1 :(得分:1)

您不应该真正硬编码数据库目录的路径。不是每次需要时都构建myPath,而是尝试使用以下代码在构造函数中构建:

实例:

private File myPath;

在构造函数中:

myPath =  context.getDatabasePath(DB_NAME);