在资产文件夹中打开 sqlite db 时出错

Posted

技术标签:

【中文标题】在资产文件夹中打开 sqlite db 时出错【英文标题】:Getting error on opening sqlite db in assets folder 【发布时间】:2017-09-17 23:15:44 【问题描述】:

我在尝试访问Assets 文件夹中的db 时收到NullpointerExceptiondbAssets 文件夹上以红色表示。

Image containing Db in Assets

public void createdatabase() throws IOException

    System.out.println(" came into Create database ");
    //Open your local db as the input stream
    InputStream myinput = mycontext.getAssets().open(DB_NAME);
    System.out.println(" myinput = "+myinput.toString());
    System.out.println(" Got input ");

    // Path to the just created empty db
    String outfilename = DB_PATH + DB_NAME;
    System.out.println(" outfilename = "+outfilename);

    //Open the empty db as the output stream
    OutputStream myoutput = new FileOutputStream(outfilename);

    // transfer byte to inputfile to outputfile
    System.out.println(" created outputStream");
    byte[] buffer = new byte[1024];
    int length;
    while ((length = myinput.read(buffer))>0) 
        myoutput.write(buffer,0,length);
    

    //Close the streams
    myoutput.flush();
    myoutput.close();
    myinput.close();

有什么方法可以检查String中的db值吗?

【问题讨论】:

发布您从资产中获取数据库的代码 但代码在 myinput 处停止执行,显示 nullPointerException 你得到的不是获取数据库的正确方法 ***.com/questions/218384 私有静态 String getDatabasePath(Context _context, String _databaseName) return "/data/data/"+_context.getPackageName()+"/databases/"+_databaseName; 【参考方案1】:

DB_NAME 与 assets 文件夹中的文件名不匹配。

有什么理由不告诉你这些值吗?

【讨论】:

你是怎么得出这个结论的?那会抛出FileNotFoundException,而不是NullPointerException。我的意思是,我不是说你错了。他们很可能有错误的名称,但显然,直接的问题是 NPE。我错过了一些 cmets 吗? 好吧告诉DB_NAME的值。和文件名。比较。他们不相等。如果我建议它们不相等,您为什么不发布这两个值?我什至让你说出价值观。难以置信。 我不是 OP。我只是问他们是否在我错过的一些评论中提到了DB_NAME 的价值,这些评论已被删除。 对不起,我监督了。这是一个如此令人困惑的帖子。确实是空指针异常。对不起。我认为是一个空上下文。 是的,我也打赌。

以上是关于在资产文件夹中打开 sqlite db 时出错的主要内容,如果未能解决你的问题,请参考以下文章

sqlite3 没有第二次打开预填充的数据库

在不同的文件中打开 SQLite3?

Django入门问题解决01

插入 android.database.sqlite.SQLiteConstraintException 时出错:NOT NULL 约束失败:result.high(代码 1299)

读取 Sqlite 数据库时出错:找不到数据库 google_app_measurement_local.db

错误的sqlite3 db.lock在VS中阻止Web部署