1、什么是JDBC?

  JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发者能够编写数据库的程序。简单地说,JDBC 可做三件事:与数据库建立连接、发送 操作数据库的语句并处理结果。
  
  2、JDBC有什么用呢?
  
  我们用JAVA就能连接到数据库;创建SQL或者MYSQL语句;执行SQL或MYSQL的查询数据库;查看和修改结果记录。
  
  二、连接常用的接口
  
  提供的接口包括:JAVA API:提供对JDBC的管理链接;JAVA Driver API:支持JDBC管理到驱动器连接。
  
  1、DriverManager :这个类管理数据库驱动程序的列表。内容是否符合从Java应用程序使用的通信子协议正确的数据
  
  库驱动程序的连接请求。识别JDBC在一定子协议的第一个驱动器被用来建立数据库连接。
  
  2、Driver :此接口处理与数据库服务器通信。很少直接与驱动程序对象。相反,使用DriverManager中的对象,它管理
  
  此类型的对象。它也抽象的与驱动程序对象工作相关的详细信息。
  
  3、Connection :此接口与接触数据库的所有方法。连接对象表示通信上下文,即,与数据库中的所有的通信是通过唯一的连接对象。
  
  4、Statement :可以使用这个接口创建的对象的SQL语句提交到数据库。一些派生的接口接受除执行存储过程的参数。
  
  5、ResultSet :这些对象保存从数据库后,执行使用Statement对象的SQL查询中检索数据。它作为一个迭代器,让你可以通过移动它的数据。

2、达梦JDBC驱动包

  在部署完数据库软件后,在$DM_HOME/drivers/jdbc下有连接达梦的JDBC 驱动 jar

  如下图所示:

java 连接达梦MPP java 连接达梦集群_sql

 注意

使用DmJdbcDriver16.jar 对应 JDK 6

使用 DmJdbcDriver17.jar 对应 JDK 7

使用 DmJdbcDriver18.jar 对应 JDK 8

使用 请根据开发环境选择合适的 DM JDBC 驱动包

3、确定JDK版本

通过第二步可以发现,达梦的JDBC驱动包的不同版本有着不同的JDK环境,如果不对应的话可能将会报错,从下图可以看出,我的JDK环境是1.8,所以我选择DmJdbcDriver18.jar驱动jar包

java 连接达梦MPP java 连接达梦集群_sql_02

4、JDBC连接与操作达梦数据集群实战

4.1、环境准备

本次我采用的eclipse开发工具,步骤是:建立工程->导入驱动包->敲连接代码->测试

4.1.1、创建java工程

java 连接达梦MPP java 连接达梦集群_sql_03

4.1.2、点击【结束】

java 连接达梦MPP java 连接达梦集群_mysql_04

 4.1.3、加载驱动包

      在eclipse工具上:窗口-.>首选上->java->用户库->new

java 连接达梦MPP java 连接达梦集群_sql_05

java 连接达梦MPP java 连接达梦集群_sql_06

java 连接达梦MPP java 连接达梦集群_sql_07

java 连接达梦MPP java 连接达梦集群_sql_08

 4.2、连接集群测试

package java_jdbc;
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.SQLException;
 public class jdbc_conn {
     static Connection con = null;
     static String cname = "dm.jdbc.driver.DmDriver";
     static String url = "jdbc:dm://AA?AA=(192.168.100.1:32141,192.168.100.2:32142)&LOGIN_MODE=(1)";
     static String userid = "DMDATA";
     static String pwd = "xxx";
     public static void main(String[] args) {
         try {
             Class.forName(cname);
             con = DriverManager.getConnection(url, userid, pwd);
             con.setAutoCommit(true);
             System.out.println("[SUCCESS]conn database");
         } catch (Exception e) {
             System.out.println("[FAIL]conn database:" + e.getMessage());
         }
     }
     public void disConn(Connection con) throws SQLException {
         if (con != null) {
             con.close();
         }
     }
 }

 -----------------------------//JDBC连接结果如下图//------------------------------

4.3、操作集群测试

4.3.1、主库为我虚拟机上的192.168.100.1,备库为192.168.100.2/192.168.100.3,对达梦集群进行增、删、改、查操作

package java_jdbc;
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
 public class jdbc_insert {
 // 定义 DM JDBC 驱动串
 static String jdbcString = "dm.jdbc.driver.DmDriver";
 // 定义 DM URL 连接串
 static String urlString = "jdbc:dm://AA?AA=(192.168.100.1:32141,192.168.100.2:32142,192.168.100.3:32143)&LOGIN_MODE=(1)";
 // 定义连接用户名
 static String userName = "DMDATA";
 // 定义连接用户口令
 static String password = "xxx";
 // 定义连接对象
 static Connection conn = null;
 // 定义 SQL 语句执行对象
 static Statement state = null;
 // 定义结果集对象
 static ResultSet rs = null;
 public static void main(String[] args) {
     try {
         //1.加载 JDBC 驱动程序
         System.out.println("Loading JDBC Driver...");
         Class.forName(jdbcString);
         //2.连接 DM 数据库
         System.out.println("Connecting to DM Server...");
         conn = DriverManager.getConnection(urlString, userName, password);
         //3.通过连接对象创建 java.sql.Statement 对象
         state = conn.createStatement();
 //------------------------------------------------------------------------------
         //基础操作:此处对应的操作代码为示例库中 DMUSER 模式中的
         //PRODUCT_CATEGORY 表
         //增加
             //定义增加的 SQL 这里由于此表中的结构为主键,自增,只需插入 name 列的值
             String sql_insert = "insert into DMUSER.PRODUCT_CATEGORY"+
             "(name)values('田田')";
             //执行添加的 SQL 语句
             state.execute(sql_insert);
         //删除
             //定义删除的 SQL 语句
             String sql_delete = "delete from DMUSER.PRODUCT_CATEGORY "+
             "where name = '厨艺'";
             //执行删除的 SQL 语句
             state.execute(sql_delete);
         //修改
             String sql_update = "update DMUSER.PRODUCT_CATEGORY set "+
             "name = '钢铁' where name = '塑料'";
         //查询表中数据
             //定义查询 SQL
             String sql_selectAll = "select * from v$INSTANCE";
             //执行查询的 SQL 语句
             rs = state.executeQuery(sql_selectAll);
             displayResultSet(rs);             state.executeUpdate(sql_update);
         } catch (ClassNotFoundException e) {
             e.printStackTrace();
         } catch (SQLException e) {
             e.printStackTrace();
         } finally {
             try {
                 //关闭资源
                 rs.close();
                 state.close();
                 conn.close();
             } catch (SQLException e) {
                 e.printStackTrace();
             }
         }
     }
     //显示结果集
     public static void displayResultSet(ResultSet rs) throws SQLException{
         while (rs.next()) {
             int i=1;
             Object id = rs.getObject(i++);
             Object name = rs.getObject(i++);
             System.out.println(id+"  "+name);
         }
     }
 }

 -----------------------------//JDBC操作结果如下图//------------------------------

java 连接达梦MPP java 连接达梦集群_数据库_09

4.3.2、切换集群主库为192.168.100.2/192.168.100.3,再次对数据库集群进行增、删、改、查操作

 -----------------------------//JDBC操作结果如下图//------------------------------

5、总结

  达梦数据库集群解决单点故障,提升了服务的持续性、高效性,当集群主库发生故障时,达梦将自动切换备库接管,JDBC在集群连接时需要注意配置连接主机的ip,避免使用单节点连接

 -----------------------------//JDBC连接到此结束//------------------------------