ssummeraw 2013-01-09 07:14 采纳率: 10%
浏览 17902
已采纳

SQLite不能打开数据库的异常

在程序的中我从assets中复制了SQLite数据库,可以使用。当把程序第一次安装在仿真器中运行时,获得以下错误。

Failed to open the database. closing it.

android.database.sqlite.SQLiteCantOpenDatabaseException: unable to open database file

E/SQLiteDatabase(7516): at android.database.sqlite.SQLiteDatabase.dbopen(Native Method)
E/SQLiteDatabase(29308):    at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:1013)

E/SQLiteDatabase(29308):    at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:986)



E/SQLiteDatabase(29308):    at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:962)

E/SQLiteDatabase(29308):    at com.guayama.database.URLDatabaseHelper.checkDBExists(URLDatabaseHelper.java:86)

 E/SQLiteDatabase(29308):   at com.guayama.database.URLDatabaseHelper.createURLDB(URLDatabaseHelper.java:54)

 E/SQLiteDatabase(29308):   at com.guayama.database.URLDatabaseHelper.<init>(URLDatabaseHelper.java:38)

打开数据库用的代码:

SQLiteDatabase.openDatabase(mPath, null,SQLiteDatabase.CREATE_IF_NECESSARY);

也试过以下的代码打开:

checkDB = SQLiteDatabase.openDatabase(mPath, null,
                SQLiteDatabase.OPEN_READONLY);

还有这个代码片段:

 SQLiteDatabase.openDatabase(mPath, null,SQLiteDatabase.NO_LOCALIZED_COLLATORS);

可以帮我看下问题所在吗?谢谢!

  • 写回答

2条回答

  • nana4ever 2013-01-09 07:57
    关注

    我经常用下面的步骤从assets文件夹中复制数据库

    private void copyDatabase() throws IOException{
    
            InputStream inputStream = context.getAssets().open(DB_NAME);
            String dbCreatePath = DB_PATH+DB_NAME;
            OutputStream outputStream = new FileOutputStream(dbCreatePath);
            byte[] buffer = new byte[1024];
            int length;
            while((length = inputStream.read(buffer))>0){
                outputStream.write(buffer,0,length);
            }
            outputStream.flush();
            outputStream.close();
            inputStream.close();
    }
    

    然后我会用下面的方法检查一遍:

    private boolean checkDatabase(){
        SQLiteDatabase checkDB = null;
        try {
            String dbPath = DB_PATH+DB_NAME;
            checkDB = SQLiteDatabase.openDatabase(dbPath, null,     
                SQLiteDatabase.OPEN_READWRITE);
        } catch (SQLiteException e) {
            // TODO: handle exception
        }
        if(checkDB!=null){
            checkDB.close();}
        return checkDB != null ? true:false;
    
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程
  • ¥20 模型在y分布之外的数据上预测能力不好如何解决