使用Java从mongodb读取blob(二进制)数据时出错

时间:2017-07-14 15:01:52

标签: java mongodb mongodb-java

我无法从MongoDB读取blob(二进制)记录,使用的是Java 3.4.2驱动程序。

    BasicDBObject whereClause = new BasicDBObject();
    List<BasicDBObject> obj = new ArrayList<BasicDBObject>();
    obj.add(new BasicDBObject("blobcontentid", "20160601201035069394000000"));
    whereClause.put("$and", obj);

    MongoCursor<Document> cursor = contentcollection.find(whereClause).iterator();

    while (cursor.hasNext()) {
        Document object = cursor.next();
        System.out.println(object.getString("blobcontentid"));
        if (object.get("content") != null){
            byte[] content = (byte []) object.get("content");   
        } else {
            System.out.println("Content is empty");
        }           
    }

错误:java.lang.ClassCastException:org.bson.types.Binary无法强制转换为[B

同样的记录我在DB2中读到这样的记录。 byte [] content = aResult.getBytes(“CONTENT”);

提前谢谢! Bharathi

1 个答案:

答案 0 :(得分:4)

您可以使用get() method on a Document with built-in casting来实现此目的。例如:

<?php
 $sql = "SELECT * FROM shape ";

   if ($result->num_rows > 0)
    {
       while($row = $result->fetch_assoc())
       {
          $id = $row['id'];
          $is_success = $row['is_success'];
          if ($is_success == 1)
          {
             echo "<div id='"id_.$id."'  style='background:green;width: 35%;  height: 14%; '> div1 </div>";
          }else {
               echo "<div id='"id_.$id."'  style='background:red; width: 35%;  height: 14%;'> div1 </div>";
          }
       }
   }
 ?>

会将插入数据库的// Insert a binary data (byte array) into the database Document document = new Document("blob", "This is a byte array blob".getBytes()); collection.insertOne(document); // Find and print the inserted byte array as String for (Document doc : collection.find()) { Binary bin = doc.get("blob", org.bson.types.Binary.class); System.out.println(new String(bin.getData())); } 打印回控制台。

作为插入操作的结果,数据库将包含This is a byte array blob元素:

BinData

请注意,如果由于BSON 16MB document size limitation而插入大量二进制数据,则此方法可能无效。如果您需要插入超过16MB的二进制数据,我建议改为使用GridFS