Java操作MongoDB时遭遇ClassCastException类型转换异常问题求助
解决MongoDB Java驱动中的ClassCastException问题
嘿,我来帮你搞定这个头疼的类型转换异常!你遇到的java.lang.ClassCastException: com.mongodb.MongoDatabaseImpl cannot be cast to com.mongodb.DB,核心原因其实很简单——你混用了MongoDB新旧两个版本的API类。
为什么会出现这个异常?
- 你用的
getDatabase()是MongoDB Java Driver 3.0之后推出的新同步API,它返回的是com.mongodb.client.MongoDatabase类型的对象(底层实现是MongoDatabaseImpl)。 - 而
DB是3.0之前旧版驱动里的Legacy API类,这俩类之间没有任何继承或实现关系,强行把前者转成后者,JVM肯定会报错。
你已经知道getDB()废弃了,改用getDatabase()是对的,但错误地给它加了强制类型转换,这才是问题的根源。
怎么修复?
只需要两步就能搞定:
1. 导入正确的类
把旧的import com.mongodb.DB;删掉,换成新API的MongoDatabase类:
import com.mongodb.client.MongoDatabase;
2. 修改代码,去掉强制转换
把你代码里的类型转换部分改成正确的类型声明:
错误代码:
DB database = (DB) mongoClient.getDatabase("pipa_db");
正确代码:
MongoDatabase database = mongoClient.getDatabase("pipa_db");
完整的修正后代码
package main.java; import javax.swing.*; import com.mongodb.MongoClient; import com.mongodb.MongoClientURI; import com.mongodb.client.MongoCursor; import com.mongodb.client.MongoDatabase; public class db_connector { public static void connect() { //DB Connector MongoClient mongoClient = new MongoClient(new MongoClientURI("mongodb://localhost:27017")); MongoCursor<String> dbsCursor = mongoClient.listDatabaseNames().iterator(); while(dbsCursor.hasNext()) { System.out.println(dbsCursor.next()); } // 正确获取MongoDatabase实例,无需强制转换 MongoDatabase database = mongoClient.getDatabase("pipa_db"); // 如果你要操作集合,用新API的方式: // MongoCollection<Document> collection = database.getCollection("your_collection"); } }
小提示
后续如果要操作集合或文档,记得用新API的对应类:
- 集合用
MongoCollection<Document>,获取方式是database.getCollection("集合名") - 文档用
org.bson.Document,替代旧版的DBObject
内容的提问来源于stack exchange,提问作者ReddyTeddy
相关产品推荐
相关产品推荐

