#基本连接配置

# 连接方法

YashanDB JDBC驱动提供如下两种建立数据库连接的方法。

# DriverManager连接

可通过如下三个DriverManager方法建立数据库连接:

  • DriverManager.getConnection(String url);
  • DriverManager.getConnection(String url, Properties info);
  • DriverManager.getConnection(String url, String user, String password);

# YasDataSource连接

通过YashanDB提供的YasDataSource类建立数据库连接:

  • YasDataSource ads = new YasDataSource();

# 参数说明

参数 描述
url 数据库连接描述符,格式为jdbc:yasdb://host:port/database_name
host:port * host:数据库所在服务器的网络地址,可以为IPv4地址、IPv6地址或域名。在共享集群部署中,若已配置SCANVIP,还可以使用相应的域名或IP地址。
* port:数据库服务端监听端口,如安装过程中未进行调整,默认为1688。

若数据库服务端与JDBC驱动安装在同一台服务器上(即本地连接),可省略host,例如jdbc:yasdb://:1688/yasdb
database_name 数据库名称,必填项。该参数仅用于兼容,无实际含义且不校验参数值。
user 数据库用户名。
password 数据库用户密码。
info 数据库连接属性。

示例

//DriverManager方法
public static Connection getConnection(String username, String passwd) {
        //驱动类。
        String driver = "com.yashandb.jdbc.Driver";
        //数据库连接描述符。
        String sourceURL = "jdbc:yasdb://192.168.1.2:1688/yasdb";
        Connection conn = null;
         
        try {
            //加载驱动。
            Class.forName(driver);
        } catch( Exception e ) {
            e.printStackTrace();
            return null;
        }
         
        try {
             //创建连接。
            conn = DriverManager.getConnection(sourceURL, username, passwd);
            System.out.println("Connection succeed!");
        } catch(Exception e) {
            e.printStackTrace();
            return null;
        }
         
        return conn;
    }
 
//YasDataSource方法
public static Connection getConnDS() {
    Connection connect = null;
    try {
      YasDataSource ads = new YasDataSource();
      ads.setURL(url);
      connect = ads.getConnection(user, password);
    } catch (Exception e) {
      e.printStackTrace();
    }
    return connect;
  }

连接串还可以为以下场景:

// 场景1:连接本地数据库
jdbc:yasdb://:1688/yashan

// 场景2:连接开启了SCAN功能的共享集群
jdbc:yasdb://scan.example.com:1688/yashan

// 场景3:连接开启了VIP功能的共享集群
jdbc:yasdb://192.168.1.62:1688/yashan

# 特殊连接格式

上述参数说明中的URL为基本连接配置格式,YashanDB JDBC驱动还支持一些特殊连接格式的配置。

# 超时时间配置

YashanDB JDBC驱动建立了超时处理机制,并允许通过配置超时时间让程序在指定期限达到时进行友好退出。

可供配置的超时时间及说明在下表中列出:

超时时间 说明
connectTimeout 建立连接时,创建socket连接的超时时间,单位为s。不配置时默认为10s。通过info属性或者URL配置。
socketTimeout 获取connection后,TCP通信过程中,客户端等待服务端返回数据的超时时间,单位为s。不配置时默认为0s,一直等待。通过info属性或者URL配置。
loginTimeout 创建socket成功后,进行登录认证时,客户端等待服务端返回数据的超时时间,单位为s。不配置时默认为300s。通过info属性或者URL配置。
SQL语句执行超时时间 通过statement接口setQueryTimeout配置。不配置时默认无超时时间,一直等待。

connectTimeout、socketTimeout以及loginTimeout通过URL进行配置时的格式示例如下:

jdbc:yasdb://192.168.1.2:1688/yashan?connectTimeout=60&socketTimeout=120&loginTimeout=60

# 连接模式配置

YashanDB JDBC驱动通过以下参数控制连接模式和数据库产品名:

参数 说明
serverMode 指定连接模式,可选值如下:
* shared:默认值,表示连接共享服务器模式,即客户端连接允许采用共享线程池处理(实际是否采用共享线程池,全凭YashanDB服务端配置参数MAX_REACTOR_CHANNELS决定)。
* dedicated:表示连接专用服务器模式,即每个客户端连接请求必须单独分配一个线程(不受YashanDB服务端相关配置影响)。
productName (隐藏参数)指定数据库产品名称标识,省略时默认识别为YashanDB,若指定则可绕过自动识别强制按指定值生效。

URL连接配置示例:

jdbc:yasdb://192.168.1.2:1688/yashan?connecTimeout=60&socketTimeout=120&loginTimeout=60&serverMode=dedicated

# 事务自动提交配置

通过JDBC驱动连接YashanDB数据库时,驱动客户端默认开启事务自动提交(autoCommit默认为true),但实际表现在不同语法模式下存在相应差异:

  • yashan模式:是否自动提交事务,取决于客户端的配置。

  • mysql模式:是否自动提交事务,取决于数据库服务端的配置,由系统变量AUTOCOMMIT控制。若服务端未开启自动提交但客户端开启,最终表现仍为不自动提交。为避免实际表现与预期或部分配置不符,建议将服务端配置与客户端配置的自动提交配置保持一致。

如需配置客户端层面的事务自动提交属性,可在连接时指定以下参数或连接后调用setAutoCommit接口进行配置。

参数 类型 描述
autoCommit string 是否开启自动提交事务,TRUE表示开启,FALSE表示不开启,默认为TRUE。

Note:

若连接时手动指定autoCommit=false关闭客户端的事务自动提交,后续使用中再通过调用setAutoCommit接口开启时,会触发一次自动提交(此时不论服务端配置如何,均会自动提交)。

通过连接参数关闭客户端的事务自动提交配置示例:

jdbc:yasdb://192.168.1.2:1688/yashan?autoCommit=false

连接后通过调用setAutoCommit接口关闭客户端的事务自动提交配置示例:

public static Connection getConnection(String username, String passwd) {
        //驱动类
        String driver = "com.yashandb.jdbc.Driver";
        //数据库连接描述符
        String sourceURL = "jdbc:yasdb://10.10.10.2:1688/yasdb";
        Connection conn = null;

        try {
            //加载驱动
            Class.forName(driver);
            //创建连接
            conn = DriverManager.getConnection(sourceURL, username, passwd);
            //调用setAutoCommit接口关闭开启自动提交
            conn.setAutoCommit(false);
            //执行SQL语句
            Statement statement = conn.createStatement();
            statement.execute("create table area_jdbc(area_no CHAR(2) NOT NULL PRIMARY KEY,area_name VARCHAR2(60), DHQ VARCHAR2(20))");
            statement.executeUpdate("INSERT INTO area_jdbc VALUES ('01','EastChina','Shanghai')");
            // 关闭自动提交后需调用commit接口进行提交
            conn.commit();
            statement.close();
            conn.close();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

# 日期时间类型转换

开启日期时间类型转换,可以将data日期类型列部分接口返回时间Timestamp类型列属性。影响接口如下:

  • ResultSet.getString(int columnIndex)将返回Timestamp形式的string。
  • ResultSet.getObject(int columnIndex)将返回Timestamp类。
  • ResultSetMetaData.getColumnClassName(int column)将返回Timestamp.class。

相关参数如下:

参数 类型 描述
mapDateToTimestamp string 该参数表示日期转时间类型是否开启,TRUE表示开启,FALSE表示不开启,默认为FALSE。

URL连接配置示例:

jdbc:yasdb://192.168.1.2:1688/yashan?mapDateToTimestamp=true

# 支持多SQL

开启支持多SQL后,可以同时传入多条SQL语句,SQL语句间用分号(;)隔开,最后1条SQL语句末尾的分号可选。传入的SQL语句将按照先后顺序依次执行,执行出错时终止并返回报错,执行成功后JDBC接口始终只返回第1条SQL语句的执行结果。

目前仅支持执行不带参数的SQL语句,且执行中不允许包含autoGeneratedKey。

支持多SQL的相关接口如下:

  • Statement.executeUpdate(String sql)
  • Statement.executeQuery(String sql)
  • Statement.addBatch(String sql)
  • Statement.execute(String sql)

相关参数如下:

参数 类型 描述
allowMultiStmt string 是否开启支持多SQL,TRUE表示开启,FALSE表示不开启,默认为FALSE。

URL连接配置示例:

jdbc:yasdb://192.168.1.2:1688/yashan?allowMultiStmt=true
edit-icon
反馈
coperate-icon
coperate
合作
communication-icon
communicate
交流