java - MongoDB:mongoClient打开后立即关闭
问题描述
package gateways;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Mongodb {
public MongoDatabase database;
public Mongodb(){
Logger.getLogger("org.mongodb.driver").setLevel(Level.SEVERE);
try (MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017")) {
database = mongoClient.getDatabase("csc207");
MongoCollection<Document> usersCollection = database.getCollection("users");
}
}
}
我无法在其他类中访问我的数据库,因为它在打开后立即关闭。
Exception in thread "main" java.lang.IllegalStateException: state should be: open
[我一直在寻找这个 2-3 小时,请帮助我]。我正在使用 MongoDB Java 驱动程序 4.1.1。
解决方案
这是由于您使用了try-with-resources语句。当您mongoClient
以try
这样的方式打开时,一旦您退出客户端try
的close
方法就会被调用,从而关闭您与 MongoDB 的连接。
据我所知,没有它你应该没问题,所以你可以摆脱它并最终得到这样的结果:
public Mongodb() {
Logger.getLogger("org.mongodb.driver").setLevel(Level.SEVERE);
MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017");
database = mongoClient.getDatabase("csc207");
MongoCollection<Document> usersCollection = database.getCollection("users");
}
推荐阅读
- python - 从先前函数返回的字典中打印键
- docker - 在 Bitnami Docker 容器中设置用户 UID
- html - 我可以使容器的悬停背景颜色大于其父容器吗
- c - 自 MacBook Pro 2015 上的 macOS Sierra 以来,编译 C 代码的速度大大降低
- vba - 在 vba 中不使用 sendkeys 在 SaveAs 窗口中设置 Excel 文件的文件名
- r - 使用 R 根据先前存在的文件夹顺序创建文件夹
- ios - UIImagePicker 初始化时间太长
- php - 使用 PHP 清理存储在变量中的 XML?
- html - 在 R Shiny 中的 DataTables 中嵌入 HTML5 小部件
- javascript - 传递给过滤器方法的布尔参数是什么?