使用 Java 从 mongodb 读取 blob(二进制)数据时出错
Error while reading blob (binary) data from mongodb using 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[]内容=aResult.getBytes("CONTENT");
提前致谢!
巴拉蒂
您可以使用 get()
method on a Document
with built-in casting 来实现这一点。例如:
// 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
元素:
> db.collection.find()
{
"_id": ObjectId("5976e23911e6772c5d32c42d"),
"blob": BinData(0, "VGhpcyBpcyBhIGJ5dGUgYXJyYXkgYmxvYg==")
}
请注意,由于 BSON 16MB document size limitation. If you need to insert more than 16MB of binary data, I suggest using GridFS 而插入大量二进制数据,此方法可能无效。
我无法从 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[]内容=aResult.getBytes("CONTENT");
提前致谢! 巴拉蒂
您可以使用 get()
method on a Document
with built-in casting 来实现这一点。例如:
// 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
元素:
> db.collection.find()
{
"_id": ObjectId("5976e23911e6772c5d32c42d"),
"blob": BinData(0, "VGhpcyBpcyBhIGJ5dGUgYXJyYXkgYmxvYg==")
}
请注意,由于 BSON 16MB document size limitation. If you need to insert more than 16MB of binary data, I suggest using GridFS 而插入大量二进制数据,此方法可能无效。