未知错误(代码14):无法打开数据库

我有一个工作的应用程序,它使用数据库和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 

所以它看起来像试图find数据库,失败,坠毁,然后修复自己。 所以我的问题是,我怎么能避免笨拙的开始和几秒钟的延迟?

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

 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... 

Solutions Collecting From Web of "未知错误(代码14):无法打开数据库"

尝试改变

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

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

YEEEESSS! 最后我find了答案。 你应该使用新版本的SQLiteAssetHelper

 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文件,没有其他选项。