JDBC如何访问达梦集群数据库?

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

  如下图所示:

 注意

使用DmJdbcDriver16.jar 对应 JDK 6

使用 DmJdbcDriver17.jar 对应 JDK 7

使用 DmJdbcDriver18.jar 对应 JDK 8

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

3、确定JDK版本

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

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

4.1、环境准备

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

4.1.1、创建java工程

4.1.2、点击【结束】

 4.1.3、加载驱动包

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

 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操作结果如下图//------------------------------

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

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

5、总结

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

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

更多内容,请访问达梦社区地址:https:eco.dameng.com

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值