You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java对接MongoDB插入用户输入记录时触发异常问题求助

问题诱因
  • 核心报错原因是Create.java中每次运行都会主动调用database.createCollection("students")方法:首次运行时集合不存在可以创建成功,第二次及以后运行时,集合已经存在,MongoDB会直接抛出集合已存在的异常,这就是你重复输入内容运行时报错的根本原因。
  • 其次你的插入逻辑存在逻辑错误:你创建了要插入的document对象,但没有将它加入到待插入的list中,写的遍历空list的循环没有任何作用,最终insertMany操作实际插入的是空列表,要么无数据写入,要么会触发空插入异常。
  • 代码中存在大量无用导入,比如javax.print.Doc、java.sql.SQLOutput等,虽然不影响运行,但会增加冗余。
修复方案

1. 优化集合创建逻辑

MongoDB默认在插入数据时如果目标集合不存在会自动创建,完全不需要主动调用createCollection方法,直接删除该行代码即可;如果有必须主动创建的场景,也可以先判断集合是否存在再执行创建操作。

2. 修复插入逻辑

如果仅插入单条数据,直接使用insertOne方法即可,无需用insertMany操作;如果确实需要批量插入,记得将创建好的文档对象加入到待插入列表中。

3. 可选优化:用try-with-resources管理连接

Java 7+的try-with-resources语法可以自动关闭MongoDB连接,无需手动调用close()方法,避免资源泄漏。

修复后代码示例

Create.java

import com.mongodb.ConnectionString;
import com.mongodb.MongoClientSettings;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;

import java.util.Scanner;

public class Create {
    private static final Scanner scanner = new Scanner(System.in);

    public static void main(String args[]) {
        ConnectionString connectionString = new ConnectionString("mongodb+srv://USER:PASSWD@CLUSTER.mongodb.net/mydb?retryWrites=true&w=majority");
        MongoClientSettings settings = MongoClientSettings.builder()
                .applyConnectionString(connectionString)
                .build();
        // try-with-resources自动关闭连接
        try (MongoClient mongoClient = MongoClients.create(settings)) {
            MongoDatabase database = mongoClient.getDatabase("test");

            System.out.println("Enter any string:");
            String inputValue = scanner.nextLine();

            // 直接获取集合,不存在会自动创建,无需主动createCollection
            Document document = new Document("name", inputValue);
            // 单条插入直接用insertOne
            database.getCollection("students").insertOne(document);
            System.out.println("Document inserted successfully");
        }
    }
}

Read.java

import com.mongodb.ConnectionString;
import com.mongodb.MongoClientSettings;
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.Iterator;

public class Read {
    public static void main(String args[]) {
        ConnectionString connectionString = new ConnectionString("mongodb+srv://USER:PASSWD@CLUSTER.mongodb.net/mydb?retryWrites=true&w=majority");
        MongoClientSettings settings = MongoClientSettings.builder()
                .applyConnectionString(connectionString)
                .build();
        try (MongoClient mongoClient = MongoClients.create(settings)) {
            MongoDatabase database = mongoClient.getDatabase("test");
            MongoCollection<Document> collection = database.getCollection("students");
            Iterator<Document> it = collection.find().iterator();
            while (it.hasNext()) {
                System.out.println(it.next());
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者techie_questie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 16:24:03