美文网首页Android知识
Android导入数据库,提示找不到表名(以解决)

Android导入数据库,提示找不到表名(以解决)

作者: o_o_72ab | 来源:发表于2017-04-11 19:22 被阅读0次

    问题情况:

    我是先将数据库保存在assets目录下,在运行时拷贝在手机数据库目录中一份,最后在使用的。

    于是代码简单到只有三步:

    1、拷贝数据库在assets里

    2、拷贝数据库到手机数据库目录中

    '''

    FiledatabasePath = getDatabasePath("a05cs.db");

    if(databasePath.exists()) {

    databasePath.delete();

    }

    try{

    FileOutputStream fos =newFileOutputStream(databasePath);

    InputStream in = getAssets().open("allarea.db");

    getResources().getAssets();

    byte[] b =new byte[1024*8];

    intl =0;

    while((l = in.read(b)) != -1) {

    fos.write(b,0,l);

    }

    fos.close();

    in.close();

    }catch(IOException e) {

    e.printStackTrace();

    }

    '''

    3、打开使用数据库

    '''

    sqLiteDatabase= SQLiteDatabase.openDatabase(databasePath.getAbsolutePath(), null,SQLiteDatabase.OPEN_READONLY);

    if(sqLiteDatabase.isReadOnly()) {//成功打开了库,但就是找不到表

    Cursor cursor =sqLiteDatabase.rawQuery(" select * from DOMAIN_PROVINCE ", null);

    intcount = cursor.getCount();

    Log.i("Li_ke","MainActivity:onCreate: "+ count);

    }

    '''

    出现的问题

    在使用的时候报错:Cursor cursor =sqLiteDatabase.rawQuery(" select * from DOMAIN_PROVINCE ", null);提示找不到表。

    问题解决

    那时因为Android Device Monitor打不开data文件,也就看不到拷贝好的内容。于是就很奇怪。试过添加读写权限(失败)、修改拷贝路径(失败)、直接使用assets目录"file:///android_asset/allarea.db"(找不到文件,然而mBinding.webView.loadUrl("file:///android_asset/test.html");却是可用的)。

    真正的错误原因是:没有找到assets目录下的*.db文件。

    至于为什么没有拿到。我也不知道。

    我是先吧getAssets();改成了getResources().getAssets();没拿到

    我又在assets下加了一个文件,那个文件拿到了,db文件还没拿到

    我又吧db文件改个名字A.db。这次拿到了。

    我的天,我肯定没写错名字,shift+F6,代码中使用的名字也跟着改的,然而却拿到了。我又改回了名字,还是拿到了。我嘞个去。 神奇。

    经验

    1、遇到错误,要先锁定错误的具体位置。真正位置。(断点)

    2、assets目录下可能会出现名字错误的情况,而导致未知BUG,此时重命名就好。

    相关文章

      网友评论

        本文标题:Android导入数据库,提示找不到表名(以解决)

        本文链接:https://www.haomeiwen.com/subject/bgxwottx.html