【问题标题】:SQLite exception unable to convert BLOB to stringSQLite 异常无法将 BLOB 转换为字符串
【发布时间】:2011-11-01 05:23:01
【问题描述】:

在我的 android 项目中,我在从数据库中检索数据时遇到了一个问题。 在此我尝试从 DB 中获取字符串值,例如 URL,但是当执行此代码时,我收到此错误 android.database.sqlite.SQLiteException:未知错误:无法将 BLOB 转换为字符串 只有 URL 列给我这个错误,而不是任何其他字符串列。

我没有找到我错的地方。所以朋友请给我建议我如何解决这个问题。在这里我还打印了我的 LogCat。

谢谢。

08-22 20:08:12.290: WARN/System.err(10844): android.database.sqlite.SQLiteException: unknown error: Unable to convert BLOB to string
08-22 20:08:12.300: WARN/System.err(10844):     at android.database.CursorWindow.getString_native(Native Method)
08-22 20:08:12.300: WARN/System.err(10844):     at android.database.CursorWindow.getString(CursorWindow.java:329)
08-22 20:08:12.300: WARN/System.err(10844):     at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:49)
08-22 20:08:12.300: WARN/System.err(10844):     at com.catLog.ProductsDetailsHomeTab.getProductDeatilsFromDB(ProductsDetailsHomeTab.java:337)
08-22 20:08:12.300: WARN/System.err(10844):     at com.catLog.ProductsDetailsHomeTab.setFlipperChild1(ProductsDetailsHomeTab.java:201)
08-22 20:08:12.300: WARN/System.err(10844):     at com.catLog.Widget.ViewFlipper_ProductDetails.onRightToLeftSwipe(ViewFlipper_ProductDetails.java:68)
08-22 20:08:12.300: WARN/System.err(10844):     at com.catLog.Widget.ViewFlipper_ProductDetails.onTouchEvent(ViewFlipper_ProductDetails.java:131)
08-22 20:08:12.300: WARN/System.err(10844):     at android.view.View.dispatchTouchEvent(View.java:3766)
08-22 20:08:12.300: WARN/System.err(10844):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:897)
08-22 20:08:12.300: WARN/System.err(10844):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
08-22 20:08:12.300: WARN/System.err(10844):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
08-22 20:08:12.300: WARN/System.err(10844):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1676)
08-22 20:08:12.300: WARN/System.err(10844):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1112)
08-22 20:08:12.300: WARN/System.err(10844):     at android.app.Activity.dispatchTouchEvent(Activity.java:2086)
08-22 20:08:12.300: WARN/System.err(10844):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1660)
08-22 20:08:12.300: WARN/System.err(10844):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
08-22 20:08:12.300: WARN/System.err(10844):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
08-22 20:08:12.300: WARN/System.err(10844):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1676)
08-22 20:08:12.300: WARN/System.err(10844):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1112)
08-22 20:08:12.300: WARN/System.err(10844):     at android.app.Activity.dispatchTouchEvent(Activity.java:2086)
08-22 20:08:12.300: WARN/System.err(10844):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1660)
08-22 20:08:12.300: WARN/System.err(10844):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
08-22 20:08:12.300: WARN/System.err(10844):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
08-22 20:08:12.300: WARN/System.err(10844):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
08-22 20:08:12.300: WARN/System.err(10844):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
08-22 20:08:12.300: WARN/System.err(10844):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
08-22 20:08:12.300: WARN/System.err(10844):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1676)
08-22 20:08:12.300: WARN/System.err(10844):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1112)
08-22 20:08:12.300: WARN/System.err(10844):     at android.app.Activity.dispatchTouchEvent(Activity.java:2086)
08-22 20:08:12.300: WARN/System.err(10844):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1660)
08-22 20:08:12.300: WARN/System.err(10844):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1785)
08-22 20:08:12.300: WARN/System.err(10844):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-22 20:08:12.300: WARN/System.err(10844):     at android.os.Looper.loop(Looper.java:123)
08-22 20:08:12.300: WARN/System.err(10844):     at android.app.ActivityThread.main(ActivityThread.java:4627)
08-22 20:08:12.300: WARN/System.err(10844):     at java.lang.reflect.Method.invokeNative(Native Method)
08-22 20:08:12.300: WARN/System.err(10844):     at java.lang.reflect.Method.invoke(Method.java:521)
08-22 20:08:12.300: WARN/System.err(10844):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
08-22 20:08:12.300: WARN/System.err(10844):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
08-22 20:08:12.300: WARN/System.err(10844):     at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

    标签: android string sqlite blob


    【解决方案1】:

    How to convert BLOB to string?

    如果不使用某些 UDF,则无法进行直接转换,但您可以 使用 SUBSTRING 函数提取文本:

    您遇到错误的列的数据类型是什么(从您所说的我认为这是 URL 列)?听起来它是 BLOB 类型,它是图像的表示,而不是字符串

    【讨论】:

    • 您好 CodeBlend,感谢您的回复。在这里,我想清除 URL 是我在 DB 中的 String 列,它是图像 URL。为了存储图像,我使用其他 Blob 列。但我的问题是获取字符串列值 & 我 getString 像 cursorForRecord.getString(cursorForRecord.getColumnIndex("image_url") 并且这个异常只发生在 URL 列而不是其他字符串列,所以请告诉我我错了吗?跨度>
    • 嗨朋友们,现在我没有任何错误它会自动解决而无需任何修改。我不知道会发生什么,但现在我没有任何错误。谢谢你和我在一起。
    • 如果将我标记为答案,我是否有任何帮助?如果没有,我不知道您是否可以关闭问题?
    • 我遇到了同样的问题。 @AmolWadekar 你能分享一下你是如何解决这个问题的吗?
    【解决方案2】:

    您应该使用方法getBlob(int),而不是getString(int)

    http://developer.android.com/reference/android/database/Cursor.html#getBlob(int)

    【讨论】:

      【解决方案3】:

      使用 getBlob() 函数代替 getString() 函数将解决问题。不过要小心,因为 getBlob() 函数返回一个 byte[] 类型的值。要将其转换为字符串,您必须执行以下操作:

      String words = "";
      try {
           words = new String(words_blob, "UTF-8");
      } catch (UnsupportedEncodingException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-25
        • 1970-01-01
        • 2013-06-28
        • 2020-01-19
        • 2017-07-07
        • 1970-01-01
        • 2016-10-07
        • 1970-01-01
        相关资源
        最近更新 更多