我有一个数据库,里面有一些图像,保存为BLOB。 到目前为止,我对数据库没有任何问题,我尝试检索BLOB,就像我对任何其他数据一样,但它不起作用:
Cursor c = mDb.query(" ... ");
c.moveToFirst();
ByteArrayInputStream inputStream = new ByteArrayInputStream(c.getBlob(0));
Bitmap b = BitmapFactory.decodeStream(inputStream);
问题是当程序试图获取“c.getBlob(0)”的信息时,我得到一个异常。它也不适用于“byte [] b = c.getBlob(0)”。
可能的原因:
谢谢!
解决:当我不小心尝试其他文件时,它有效!然后我意识到文件较小(小于1Mb),所以问题似乎是大小。
现在我的问题是,我可以配置它以使BLOB支持大文件吗?
谢谢!
答案 0 :(得分:6)
在尝试检索任何内容之前,您是否确认游标中确实存在数据?
if(c.getCount() > 0){do something}
如果您不这样做,那么您将尝试检索已经为空的内容 BIG NO NO
此外,在获取元素时,不良好做法可以像这样检索:c.getBlob(0)
其他信息
之所以这样,是因为如果您决定更改列并更改订单,这会让您大吃一惊。
我的建议是让一个辅助类中存在的静态变量引用你定义的列名,如下所示:
c.getString(c.getColumnIndex(String columnName))
这是更好的做法,因为您可以通过引用名称轻松更改数据库。
在此处阅读我的帖子,了解如何处理数据库并间接调用数据库。你将会感谢你将避免的所有头痛。
点击此处:Storing Lists to A Database, and Retrieving Them All Together : Android
此外,在发布问题时,错误的logcat有助于更快地解决问题。