
# 连接数据库
#### 使用SSL证书连接
![](https://support.huaweicloud.com/devg-dds/public_sys-resources/note_3.0-zh-cn.png)
该方式属于SSL连接模式，需要下载SSL证书，通过证书校验并连接数据库。
您可以在"实例管理"页面，单击实例名称进入"基本信息"页面，单击"数据库信息"模块"SSL"处的![](https://support.huaweicloud.com/devg-dds/zh-cn_image_0000001224637036.png)，下载根证书或捆绑包。
1. 通过Java连接MongoDB数据库，代码中的Java链接格式如下： 
   - 连接到单节点：
     ```
     mongodb://<username>:<password>@<instance_ip>:<instance_port>/<database_name>?authSource=admin&ssl=true
     ```
     
   
   
   
   - 连接到副本集：
     ```
     mongodb://<username>:<password>@<instance_ip>:<instance_port>/<database_name>?authSource=admin&replicaSet=replica&ssl=true
     ```
     
   
   
   
   - 连接到集群：
     ```
     mongodb://<username>:<password>@<instance_ip>:<instance_port>/<database_name>?authSource=admin&ssl=true
     ```
     表1参数说明 
     | 参数                | 说明                                                   |
     |:---|:---|
     | \<username\>      | 当前用户名。                                               |
     | \<password\>      | 当前用户的密码。                                             |
     | \<instance_ip\>   | 如果通过弹性云服务器连接，"instance_ip"是主机IP，即"基本信息"页面该实例的"内网地址"。 |
     | \<instance_ip\>   | 如果通过连接了公网的设备访问，"instance_ip"为该实例已绑定的"弹性公网IP"。        |
     | \<instance_port\> | 端口，默认8635，当前端口，参考"基本信息"页面该实例的"数据库端口"。                |
     | \<database_name\> | 数据库名，即需要连接的数据库名。                                     |
     | authSource        | 鉴权用户数据库，取值为admin。                                    |
     | ssl               | 连接模式，值为true代表是使用ssl连接模式。                             |
        
     
   
   
   连接MongoDB数据库的Java代码，可参考以下示例：
   ```
   import java.util.ArrayList;
   import java.util.List;
   import org.bson.Document;
   import com.mongodb.MongoClient;
   import com.mongodb.MongoCredential;
   import com.mongodb.ServerAddress;
   import com.mongodb.client.MongoDatabase;
   import com.mongodb.client.MongoCollection;
   import com.mongodb.MongoClientURI;
   import com.mongodb.MongoClientOptions;
   public class MongoDBJDBC {
   public static void main(String[] args){
         try {
                 System.setProperty("javax.net.ssl.trustStore", "/home/Mike/jdk1.8.0_112/jre/lib/security/mongostore");
                 // 认证用的用户名和密码直接写到代码中有很大的安全风险，建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密)，确保安全；
                 // 本示例以用户名和密码保存在环境变量中为例，运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。
                 String password = System.getenv("EXAMPLE_PASSWORD_ENV");
                 System.setProperty("javax.net.ssl.trustStorePassword", password);
                 ServerAddress serverAddress = new ServerAddress("ip", port);
                 List addrs = new ArrayList();
                 addrs.add(serverAddress);
                 // 认证用的用户名和密码直接写到代码中有很大的安全风险，建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密)，确保安全；
                 // 本示例以用户名和密码保存在环境变量中为例，运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。
                 String userName = System.getenv("EXAMPLE_USERNAME_ENV");
                 String rwuserPassword = System.getenv("EXAMPLE_PASSWORD_ENV");
                 MongoCredential credential = MongoCredential.createScramSha1Credential("rwuser", "admin", rwuserPassword.toCharArray());
                 List credentials = new ArrayList();
                 credentials.add(credential);
                 MongoClientOptions opts= MongoClientOptions.builder()
                 .sslEnabled(true)
                 .sslInvalidHostNameAllowed(true)
                 .build();
                 MongoClient mongoClient = new MongoClient(addrs,credentials,opts);
                 MongoDatabase mongoDatabase = mongoClient.getDatabase("testdb");
                 MongoCollection collection = mongoDatabase.getCollection("testCollection");
                 Document document = new Document("title", "MongoDB").
                 append("description", "database").
                 append("likes", 100).
                 append("by", "Fly");
                 List documents = new ArrayList();
                 documents.add(document);
                 collection.insertMany(documents);
                 System.out.println("Connect to database successfully");
                 } catch (Exception e) {
                 System.err.println( e.getClass().getName() + ": " + e.getMessage() );
            }
         }
   }
   ```
   样例代码：
   ```
   javac -cp .:mongo-java-driver-3.2.0.jar MongoDBJDBC.java
   ```
   ```
   java -cp .:mongo-java-driver-3.2.0.jar MongoDBJDBC
   ```
   
   
 
#### 无证书连接
![](https://support.huaweicloud.com/devg-dds/public_sys-resources/note_3.0-zh-cn.png)
该方式属于非SSL连接模式，不对服务端进行证书校验，用户无需下载SSL证书。
1. 通过Java连接MongoDB数据库实例，代码中的Java链接格式如下： 
   - 连接到单节点：
     ```
     mongodb://<username>:<password>@<instance_ip>:<instance_port>/<database_name>?authSource=admin
     ```
     
   
   
   
   - 连接到副本集：
     ```
     mongodb://<username>:<password>@<instance_ip>:<instance_port>/<database_name>?authSource=admin&replicaSet=replica
     ```
     
   
   
   
   - 连接到集群：
     ```
     mongodb://<username>:<password>@<instance_ip>:<instance_port>/<database_name>?authSource=admin
     ```
     表2参数说明 
     | 参数                | 说明                                                   |
     |:---|:---|
     | \<username\>      | 当前用户名。                                               |
     | \<password\>      | 当前用户的密码。                                             |
     | \<instance_ip\>   | 如果通过弹性云服务器连接，"instance_ip"是主机IP，即"基本信息"页面该实例的"内网地址"。 |
     | \<instance_ip\>   | 如果通过连接了公网的设备访问，"instance_ip"为该实例已绑定的"弹性公网IP"。        |
     | \<instance_port\> | 端口，默认8635，当前端口，参考"基本信息"页面该实例的"数据库端口"。                |
     | \<database_name\> | 数据库名，即需要连接的数据库名。                                     |
     | authSource        | 鉴权用户数据库，取值为admin。                                    |
        
     
   
   
   连接MongoDB数据库的Java代码，可参考以下示例：
   ```
   import com.mongodb.ConnectionString;
   import com.mongodb.reactivestreams.client.MongoClients;
   import com.mongodb.reactivestreams.client.MongoClient;
   import com.mongodb.reactivestreams.client.MongoDatabase;
   import com.mongodb.MongoClientSettings;
   public class MyConnTest { 
       final public static void main(String[] args) { 
   try {
           // no ssl 
           // 认证用的用户名和密码直接写到代码中有很大的安全风险，建议在配置文件或者环境变量中存放(密码应密文存放、使用时解密)，确保安全；
           // 本示例以用户名和密码保存在环境变量中为例，运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。
           String userName = System.getenv("EXAMPLE_USERNAME_ENV");
           String rwuserPassword = System.getenv("EXAMPLE_PASSWORD_ENV");
   ConnectionString connString = new ConnectionString("mongodb://" + userName + ":" + rwuserPassword + "@192.*.*.*:8635,192.*.*.*:8635/test? authSource=admin");
   MongoClientSettings settings = MongoClientSettings.builder()
   .applyConnectionString(connString)
   .retryWrites(true)
   .build();
   MongoClient mongoClient = MongoClients.create(settings);
   MongoDatabase database = mongoClient.getDatabase("test");
        System.out.println("Connect to database successfully");  
   } catch (Exception e) { 
               e.printStackTrace(); 
               System.out.println("Test failed"); 
           } 
   }
   }
   ```
   
   
 
