9

我有一个使用数据库和SQLiteAssetHelper的工作应用程序。数据库文件 (sql.sqlite) 被压缩 (sql.sqlite.zip) 并放在 assets/databases 文件夹中。

该程序运行良好。当运行第二/第三/第四...时间时,它会快速启动。但是,如果我执行“强制停止”然后执行“清除数据”然后再次运行它,那么当我运行它(查看日志)时,我会看到一个错误“未知错误(代码 14):无法打开数据库”...但然后我等了几秒钟,一切都加载并完美运行。

日志如下:

W/SQLiteAssetHelper(18393): could not open database SQL.sqlite - unknown error (code 14): Could not open database
W/SQLiteAssetHelper(18393): copying database from assets...
W/SQLiteAssetHelper(18393): extracting file: 'sql.sqlite'...
W/SQLiteAssetHelper(18393): database copy complete
I/SQLiteAssetHelper(18393): successfully opened database SQL.sqlite

所以看起来它以某种方式试图找到数据库,失败了,崩溃了,然后自己修复了。所以我的问题是,我怎么能避免笨拙的开始和几秒钟的延迟?

编辑:我在代码中对数据库的第一次引用是......

public class Globals extends Application
{
    Custom_SQLiteAssetHelper db;   
    public void onCreate()
    {
        super.onCreate();
        db = new Custom_SQLiteAssetHelper(this);
        cursor = db.get_first_species_common_name();

我有...

public class Custom_SQLiteAssetHelper extends SQLiteAssetHelper
{
    public Custom_SQLiteAssetHelper(Context context)
    {
        super(context, "SQL.sqlite", null, 1);  
    }
    public Cursor get_first_species_common_name()
    {
        SQLiteDatabase db = getReadableDatabase();
        SQLiteQueryBuilder querything = new SQLiteQueryBuilder();
            // etc...
4

3 回答 3

1

终于我找到了答案。您应该使用较新版本的 SQLiteAssetHelper

于 2015-03-02T21:16:42.350 回答
0

尝试改变

super(context, "SQL.sqlite", null, 1);

 super(context, "SQL", null, 1);
于 2014-12-01T19:55:57.120 回答
-1
public Custom_SQLiteAssetHelper(Context context)
{
    super(context, "SQL.sqlite", null, 1);  
}

改成

public Custom_SQLiteAssetHelper(Context context)
{
    super(context, "SQL.sqlite", null, 1);  
    close();
}

@haike00 他正在使用 SQLiteAssetHelper 这是一个库,它支持您在首次运行应用程序时将预填充的 sqlite 数据库复制到内部/外部存储。使用这个库时,你必须压缩你的 sqlite 文件,没有其他选项。

于 2014-01-08T04:46:10.207 回答