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

问题情况:

我是先将数据库保存在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,此时重命名就好。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容