在IDEA中用三个jar包链接MongoDB数据库——实现增删改查

首先下载三个JAR包,分别是:mongodb-driver-X.X.X.jar,bson-X.X.X.jar,mongodb-driver-core-X.X.X.jar

X.X.X是版本号,尽量保证版本号一致,否则运行会报错,在这我使用的是3.11.0的版本,
或者添加maven以来,自己导入

<dependencies>
    <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongo-java-driver</artifactId>
            <version>3.11.0</version>
        </dependency>
</dependencies>

一.给项目导入上面三个JAR包

1.file->Project Structure…
在这里插入图片描述
2.选择Modules 再点击右侧的添加按钮

在这里插入图片描述
3.选择三个JAR包添加至Modules中,尽量先把JAR拷贝到项目的lib文件夹(自己手动创建)里,再引入,避免以后JAR位置移动,项目找不到JAR包就会报错。

在这里插入图片描述

二.建立链接

1.编写MongoDB数据库链接类

import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import java.util.ArrayList;
import java.util.List;
 
public class MongoDBConnection {
    //不认证直接链接数据库
    public MongoClient getConn(){
 
        MongoClient mongoClient = new MongoClient("localhost",27017);
        //也可使用MongoClientURI
//        MongoClientURI mongoClientURI = new MongoClientURI("mongodb://localhost:27017");
//        MongoClient mongoClient = new MongoClient(mongoClientURI);
        return mongoClient;
    }
 
    //通过用户密码认证链接数据库
    public MongoClient getConnByCredit(){
 
        String name = "test";//用户名
        String dbName = "Test";//数据库名
        char [] pwd = "test".toCharArray();//用户密码(将字符串转换成字符数组)
 
        List<ServerAddress> addresses = new ArrayList<>();
        //服务器地址:链接地址,端口号
        ServerAddress address = new ServerAddress("localhost",27017);
        addresses.add(address);
 
        List<MongoCredential> credentials = new ArrayList<>();
        //认证方法需要三个参数,用户名,数据库名,用户密码
        MongoCredential credential = MongoCredential.createScramSha1Credential(name,dbName,pwd);
        credentials.add(credential);
 
        //创建链接对象
        MongoClient mongoClient = new MongoClient(addresses,credentials);
        return mongoClient;
 
    }
 
    //测试是否连接成功
    public static void main(String[] args) {
        MongoDBConnection mongoDBConnection = new MongoDBConnection();
        MongoDatabase mongoDatabase = null;
        MongoClient mongoClient = mongoDBConnection.getConn();
//        MongoClient mongoClient = mongoDBConnection.getConnByCredit();
 
        //查询所有数据库名称
        MongoIterable<String> dbNameList = mongoClient.listDatabaseNames();
        System.out.println("查询所有数据库名称:");
        for(String dbName : dbNameList)
            System.out.println(dbName);
 
        //创建数据库对象
        mongoDatabase = mongoClient.getDatabase("Test");
        //查询Test数据库中所有集合名称
        MongoIterable<String> colNameList = mongoDatabase.listCollectionNames();
        System.out.println("查询Test数据库中所有集合名称:");
        for(String colName: colNameList)
            System.out.println(colName);
 
        //关闭连接
        mongoClient.close();
        }
    }
 
}

```bash

输出结果:

九月 11, 2019 4:31:16 下午 com.mongodb.diagnostics.logging.JULLogger log
信息: Cluster created with settings {hosts=[localhost:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
查询所有数据库名称:
九月 11, 2019 4:31:16 下午 com.mongodb.diagnostics.logging.JULLogger log
信息: Cluster description not yet available. Waiting for 30000 ms before timing out
九月 11, 2019 4:31:16 下午 com.mongodb.diagnostics.logging.JULLogger log
信息: Opened connection [connectionId{localValue:1, serverValue:23}] to localhost:27017
九月 11, 2019 4:31:16 下午 com.mongodb.diagnostics.logging.JULLogger log
信息: Monitor thread successfully connected to server with description ServerDescription{address=localhost:27017, type=STANDALONE, state=CONNECTED, ok=true, version=ServerVersion{versionList=[4, 0, 11]}, minWireVersion=0, maxWireVersion=7, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=2393400}
九月 11, 2019 4:31:16 下午 com.mongodb.diagnostics.logging.JULLogger log
信息: Opened connection [connectionId{localValue:2, serverValue:24}] to localhost:27017
Test
admin
config
local
查询Test数据库中所有集合名称:
user
九月 11, 2019 4:31:16 下午 com.mongodb.diagnostics.logging.JULLogger log
信息: Closed connection [connectionId{localValue:2, serverValue:24}] to localhost:27017 because the pool has been closed.

2.遇到的问题

编写MongoDB数据库连接类时,我尝试去用try-catch去捕获连接中可能会出现的异常,但是发现try-catch语句并没有任何作用,即使你真的把端口号或者服务器地址改错,也不会在连接环节抛出任何异常,只有到后边真正用到数据库内容时才会报错。所以在这里也没有再多余使用try-catch语句,等到后边进行具体操作数据的时候再使用。

三.对数据库进行CRUD操作

原始数据:
在这里插入图片描述

{
    "_id" : ObjectId("5d554f1e5306e8e23cbe5956"),
    "user_id" : "1",
    "user_name" : "aaa",
    "user_pwd" : "aaa"
}
{
    "_id" : ObjectId("5d554f1e5306e8e23cbe5959"),
    "user_id" : "2",
    "user_name" : "bbb",
    "user_pwd" : "bbb"
}
{
    "_id" : ObjectId("5d554f1e5306e8e23cbe595c"),
    "user_id" : "3",
    "user_name" : "123",
    "user_pwd" : "123"
}

1.集合查询

    //查询指定数据库中所有集合
    public void selectCollection(MongoDatabase database){
 
        try{
            //查询Test数据库中所有集合名称
            MongoIterable<String> colNameList = database.listCollectionNames();
            for(String colName: colNameList)
                System.out.println(colName);
            System.out.println("[INFO] : Select collection success!");
        }catch(MongoException e){
            e.printStackTrace();
            System.out.println("[ERROR] : Select collection field!");
        }

2.新建集合

    //新建集合
    public void createCollection(MongoDatabase database){
        try{
            //创建新集合
            database.createCollection("testCol");
            System.out.println("[INFO] : Create collection success!");
        }catch(MongoException e){
            e.printStackTrace();
            System.out.println("[ERROR] : Create collection field!");
        }
    }

3.删除集合

    //删除集合
    public void deleteCollection(MongoDatabase database){
        try{
            //删除集合
            MongoCollection mongoCollection = database.getCollection("testCol");
            mongoCollection.drop();
            System.out.println("[INFO] : Drop collection success!");
        }catch(MongoException e){
            e.printStackTrace();
            System.out.println("[ERROR] : Drop collection field!");
        }
    }

4.查询文档数据:

    //查询文档数据
    public void selectData(MongoDatabase database){
 
        try{
            //获取数据库中的user集合
            MongoCollection<Document> collection = database.getCollection("user");
            //获取user集合中的文档
            FindIterable<Document> iterable = collection.find();
            //通过迭代器遍历找到的文档中的信息
            MongoCursor<Document> iterator = iterable.iterator();
            while(iterator.hasNext()){
                System.out.println(iterator.next().toJson());
            }
            System.out.println("[INFO] : Select data success!");
        }catch(MongoException e){
            e.printStackTrace();
            System.out.println("[ERROR] : Select data field!");
        }
    }

5.向集合中插入数据
单数据插入和多数据插入,可以通过Robo 3T去看数据库的变化,在这单个方法里边不想再写多余的查询语句,下边的修改删除也一样,分开写太麻烦,了解过程就可以了

    //插入数据
    public void insertData(MongoDatabase database){
        try {
 
            MongoCollection mongoCollection = database.getCollection("user");
 
            //一次插入一条数据
            Document document = new Document("user_id","4")
                    .append("user_name","test")
                    .append("user_pwd","test");
            mongoCollection.insertOne(document);
 
            //一次插入多条数据
            Document document1 = new Document("user_id","5")
                    .append("user_name","test")
                    .append("user_pwd","test1");
            Document document2 = new Document("user_id","6")
                    .append("user_name","test")
                    .append("user_pwd","test2");
            List<Document> documents = new ArrayList<>();
            documents.add(document1);
            documents.add(document2);
            mongoCollection.insertMany(documents);
 
            System.out.println("[INFO] : Insert data success!");
        }catch(MongoException e){
            e.printStackTrace();
            System.out.println("[ERROR] : Insert data field!");
        }
    }

6.根据条件修改集合中的数据

    //修改数据
    public void updateData(MongoDatabase database){
        try {
            MongoCollection mongoCollection = database.getCollection("user");
            //修改满足条件的第一条数据
            mongoCollection.updateOne(Filters.eq("user_name","test"),new Document("$set",new Document("user_pwd","tttt")));
            //修改满足条件的所有数据
            mongoCollection.updateMany(Filters.eq("user_name","test"),new Document("$set",new Document("user_pwd","tttt")));
 
            System.out.println("[INFO] : Update data success!");
        }catch(MongoException e){
            e.printStackTrace();
            System.out.println("[ERROR] : Update data field!");
        }
    }

7.根绝条件删除集合中的数据

    //删除数据
    public void deleteData(MongoDatabase database){
        try {
            MongoCollection mongoCollection = database.getCollection("user");
            //删除满足条件的第一条记录
            mongoCollection.deleteOne(Filters.eq("user_name","test"));
            //删除满足条件的所有数据
            mongoCollection.deleteMany(Filters.eq("user_name","test"));
            System.out.println("[INFO] : Delete data success!");
        }catch(MongoException e){
            e.printStackTrace();
            System.out.println("[ERROR] : Delete data field!");
        }
    }

8.全部代码及所有操作运行结果

package September_9;
 
import com.mongodb.MongoClient;
import com.mongodb.MongoException;
import com.mongodb.client.*;
import com.mongodb.client.model.Filters;
import org.bson.Document;
 
import java.util.ArrayList;
import java.util.List;
 
public class DBOperation {
 
    /**
     * 操作数据库集合:
     * 查询、新建、删除
     * @param database
     */
 
    //查询指定数据库中所有集合
    public void selectCollection(MongoDatabase database){
 
        try{
            //查询Test数据库中所有集合名称
            MongoIterable<String> colNameList = database.listCollectionNames();
            for(String colName: colNameList)
                System.out.println(colName);
            System.out.println("[INFO] : Select collection success!");
        }catch(MongoException e){
            e.printStackTrace();
            System.out.println("[ERROR] : Select collection field!");
        }
 
    }
 
    //新建集合
    public void createCollection(MongoDatabase database){
        try{
            //创建新集合
            database.createCollection("testCol");
            System.out.println("[INFO] : Create collection success!");
        }catch(MongoException e){
            e.printStackTrace();
            System.out.println("[ERROR] : Create collection field!");
        }
    }
 
    //删除集合
    public void deleteCollection(MongoDatabase database){
        try{
            //删除集合
            MongoCollection mongoCollection = database.getCollection("testCol");
            mongoCollection.drop();
            System.out.println("[INFO] : Drop collection success!");
        }catch(MongoException e){
            e.printStackTrace();
            System.out.println("[ERROR] : Drop collection field!");
        }
    }
 
    /**
     * 操作数据库数据:
     * 查询、插入、修改、删除
     * @param database
     */
 
    //查询文档数据
    public void selectData(MongoDatabase database){
 
        try{
            //获取数据库中的user集合
            MongoCollection<Document> collection = database.getCollection("user");
            //获取user集合中的文档
            FindIterable<Document> iterable = collection.find();
            //通过迭代器遍历找到的文档中的信息
            MongoCursor<Document> iterator = iterable.iterator();
            while(iterator.hasNext()){
                System.out.println(iterator.next().toJson());
            }
            System.out.println("[INFO] : Select data success!");
        }catch(MongoException e){
            e.printStackTrace();
            System.out.println("[ERROR] : Select data field!");
        }
    }
 
    //插入数据
    public void insertData(MongoDatabase database){
        try {
 
            MongoCollection mongoCollection = database.getCollection("user");
 
            //一次插入一条数据
            Document document = new Document("user_id","4")
                    .append("user_name","test")
                    .append("user_pwd","test");
            mongoCollection.insertOne(document);
 
            //一次插入多条数据
            Document document1 = new Document("user_id","5")
                    .append("user_name","test")
                    .append("user_pwd","test1");
            Document document2 = new Document("user_id","6")
                    .append("user_name","test")
                    .append("user_pwd","test2");
            List<Document> documents = new ArrayList<>();
            documents.add(document1);
            documents.add(document2);
            mongoCollection.insertMany(documents);
 
            System.out.println("[INFO] : Insert data success!");
        }catch(MongoException e){
            e.printStackTrace();
            System.out.println("[ERROR] : Insert data field!");
        }
    }
 
    //修改数据
    public void updateData(MongoDatabase database){
        try {
            MongoCollection mongoCollection = database.getCollection("user");
            //修改满足条件的第一条数据
            mongoCollection.updateOne(Filters.eq("user_name","test"),new Document("$set",new Document("user_pwd","tttt")));
            //修改满足条件的所有数据
            mongoCollection.updateMany(Filters.eq("user_name","test"),new Document("$set",new Document("user_pwd","tttt")));
 
            System.out.println("[INFO] : Update data success!");
        }catch(MongoException e){
            e.printStackTrace();
            System.out.println("[ERROR] : Update data field!");
        }
    }
 
    //删除数据
    public void deleteData(MongoDatabase database){
        try {
            MongoCollection mongoCollection = database.getCollection("user");
            //删除满足条件的第一条记录
            mongoCollection.deleteOne(Filters.eq("user_name","test"));
            //删除满足条件的所有数据
            mongoCollection.deleteMany(Filters.eq("user_name","test"));
            System.out.println("[INFO] : Delete data success!");
        }catch(MongoException e){
            e.printStackTrace();
            System.out.println("[ERROR] : Delete data field!");
        }
    }
 
    public static void main(String[] args) {
        DBOperation dbOperation = new DBOperation();
 
        MongoDBConnection mongoDBConnection = new MongoDBConnection();
 
        //新建链接
        MongoClient mongoClient = mongoDBConnection.getConn();
        //新建数据库对象
        MongoDatabase mongoDatabase = mongoClient.getDatabase("Test");
 
        //查询指定数据库中的所有集合
        System.out.println("原始集合:");
        dbOperation.selectCollection(mongoDatabase);
        //创建新集合
        dbOperation.createCollection(mongoDatabase);
        System.out.println("新建集合后,再次查询数据库中的所有集合:");
        dbOperation.selectCollection(mongoDatabase);
        //删除集合
        dbOperation.deleteCollection(mongoDatabase);
        System.out.println("删除集合后,再次查询数据库中的所有集合:");
        dbOperation.selectCollection(mongoDatabase);
 
 
        //查询指定集合中的所有数据
        System.out.println("原始数据:");
        dbOperation.selectData(mongoDatabase);
        //向指定集合中插入数据
        dbOperation.insertData(mongoDatabase);
        System.out.println("插入数据后:");
        dbOperation.selectData(mongoDatabase);
        //根据条件修改集合中的数据
        dbOperation.updateData(mongoDatabase);
        System.out.println("修改数据后:");
        dbOperation.selectData(mongoDatabase);
        //根据条件删除集合中的数据
        dbOperation.deleteData(mongoDatabase);
        System.out.println("删除数据后:");
        dbOperation.selectData(mongoDatabase);
 
        //关闭连接
        mongoClient.close();
 
 
    }
 
}

运行结果:

原始集合:

user
[INFO] : Select collection success!
[INFO] : Create collection success!
新建集合后,再次查询数据库中的所有集合:
testCol
user
[INFO] : Select collection success!
[INFO] : Drop collection success!
删除集合后,再次查询数据库中的所有集合:
user
[INFO] : Select collection success!
原始数据:
{"_id": {"$oid": "5d554f1e5306e8e23cbe5956"}, "user_id": "1", "user_name": "aaa", "user_pwd": "aaa"}
{"_id": {"$oid": "5d554f1e5306e8e23cbe5959"}, "user_id": "2", "user_name": "bbb", "user_pwd": "bbb"}
{"_id": {"$oid": "5d554f1e5306e8e23cbe595c"}, "user_id": "3", "user_name": "123", "user_pwd": "123"}
[INFO] : Select data success!
[INFO] : Insert data success!
插入数据后:
{"_id": {"$oid": "5d554f1e5306e8e23cbe5956"}, "user_id": "1", "user_name": "aaa", "user_pwd": "aaa"}
{"_id": {"$oid": "5d554f1e5306e8e23cbe5959"}, "user_id": "2", "user_name": "bbb", "user_pwd": "bbb"}
{"_id": {"$oid": "5d554f1e5306e8e23cbe595c"}, "user_id": "3", "user_name": "123", "user_pwd": "123"}
{"_id": {"$oid": "5d79d9f21781915b8368c25f"}, "user_id": "4", "user_name": "test", "user_pwd": "test"}
{"_id": {"$oid": "5d79d9f21781915b8368c260"}, "user_id": "5", "user_name": "test", "user_pwd": "test1"}
{"_id": {"$oid": "5d79d9f21781915b8368c261"}, "user_id": "6", "user_name": "test", "user_pwd": "test2"}
[INFO] : Select data success!
[INFO] : Update data success!
修改数据后:
{"_id": {"$oid": "5d554f1e5306e8e23cbe5956"}, "user_id": "1", "user_name": "aaa", "user_pwd": "aaa"}
{"_id": {"$oid": "5d554f1e5306e8e23cbe5959"}, "user_id": "2", "user_name": "bbb", "user_pwd": "bbb"}
{"_id": {"$oid": "5d554f1e5306e8e23cbe595c"}, "user_id": "3", "user_name": "123", "user_pwd": "123"}
{"_id": {"$oid": "5d79d9f21781915b8368c25f"}, "user_id": "4", "user_name": "test", "user_pwd": "tttt"}
{"_id": {"$oid": "5d79d9f21781915b8368c260"}, "user_id": "5", "user_name": "test", "user_pwd": "tttt"}
{"_id": {"$oid": "5d79d9f21781915b8368c261"}, "user_id": "6", "user_name": "test", "user_pwd": "tttt"}
[INFO] : Select data success!
[INFO] : Delete data success!
删除数据后:
{"_id": {"$oid": "5d554f1e5306e8e23cbe5956"}, "user_id": "1", "user_name": "aaa", "user_pwd": "aaa"}
{"_id": {"$oid": "5d554f1e5306e8e23cbe5959"}, "user_id": "2", "user_name": "bbb", "user_pwd": "bbb"}
{"_id": {"$oid": "5d554f1e5306e8e23cbe595c"}, "user_id": "3", "user_name": "123", "user_pwd": "123"}
[INFO] : Select data success!



  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值