【问题标题】:Retrieving BLOB from SQLite database android从 SQLite 数据库 android 中检索 BLOB
【发布时间】:2011-09-09 17:39:55
【问题描述】:

我有一个数据库,里面有一些图像,保存为 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)”。

可能的原因:

  • 文件太大? (1.2Mb)
  • 我必须做其他事情来配置它的那种 BLOB?

谢谢!


已解决:当我不小心尝试使用其他文件时,它起作用了!然后我意识到文件更小(小于1Mb),所以问题似乎出在大小上。

现在我的问题是,我可以配置它以使 BLOB 支持大文件吗?

谢谢!

【问题讨论】:

  • 您遇到的异常是什么?
  • 有点奇怪,我得到了: ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord, Intent) 现在只是在调用: c.getBlob(c.getColumnIndex("data" ))

标签: android image sqlite blob


【解决方案1】:

在尝试检索任何内容之前,您是否确认光标中确实存在数据?

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 有助于更快地解决问题。

【讨论】:

  • 您好,非常感谢您的回答。正如你所说,我已经改变了访问数据的方式。当我得到 c.getCount() 时它返回 1,所以实际上里面有数据要检索。谢谢!
  • @AdamSchmit 如果它解决了您的问题,请不要忘记接受答案。
猜你喜欢
  • 2012-09-24
  • 1970-01-01
  • 1970-01-01
  • 2021-01-28
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 2018-04-18
  • 1970-01-01
相关资源
最近更新 更多