【问题标题】:Spring JDBC - ClassCastException when casting Object to BlobSpring JDBC - 将对象转换为 Blob 时出现 ClassCastException
【发布时间】:2015-11-19 06:21:25
【问题描述】:

我有一个表,其中 2 个字段是 Varchar 和 Blob 类型。当我使用 queryForMap 检索它们时,我得到一个带有两个键(列名)的地图实例。我可以简单地将 varchar 转换为 String,但是让 ClassCast Exception 对 Object 做同样的事情。

file = new File(System.currentTimeMillis() + (String) map.get("SAMPLE_DOC_FILE_NAME"));
blob = (Blob) map.get("SAMPLE_DOC");

我的DAO层方法是:

public Map<String, Object> getSampleDoc1(String docName) throws SQLException {

    String query = "select form.sample_doc_file_name as SAMPLE_DOC_FILE_NAME, form.sample_document as SAMPLE_DOC from forms form where form.document_name=?";
    return localJdbcTemplateObject.queryForMap(query, docName);
}

例外 - java.lang.ClassCastException: [B cannot be cast to java.sql.Blob

我该怎么做才能将该对象作为 Blob 取回?

【问题讨论】:

  • 图像可以使用“byte[]”数据类型,它会在数据库中转换为BLOB类型
  • System.out.println(yourBlob.getClass().getName());在这个对象上,然后使用这个类。
  • @Ramaraj,我在检索后遇到了问题。
  • @KrzysztofCichocki,你能解释一下吗?

标签: java mysql spring spring-jdbc


【解决方案1】:

Blob 只是一个(可能很大)byte[] 的包装器。您从 Spring 中得到的是有趣的原始数据,byte[](或异常符号中的B[)。因此,只需使用它,它会更容易使用:

byte[] blob = (byte[]) map.get("SAMPLE_DOC");

【讨论】:

    【解决方案2】:

    请检查它有什么类:

    System.out.println(map.get("SAMPLE_DOC").getClass().getName());
    

    然后转换成这个类型,然后你就可以使用这个类型的API来做一些事情了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-22
      • 1970-01-01
      • 1970-01-01
      • 2018-09-25
      • 1970-01-01
      • 2018-11-03
      相关资源
      最近更新 更多