#基本连接配置
# 连接方法
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地址或域名。在共享集群部署中,若已配置SCAN或VIP,还可以使用相应的域名或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

