#mysql模式连接配置
YashanDB JDBC在配置连接时提供语法兼容模式设置,在数据库服务端为mysql模式时,相应地将连接配置为mysql模式,可以实现驱动程序按MySQL兼容模式进行如下操作处理:
传入的用户名会区分大小写。
元数据DatabaseMetaData的getDatabaseProductName接口的返回值会变成mysql。
数据库服务端为yashan模式时,无需进行兼容模式配置,或配置为yashan。
YashanDB JDBC驱动在URL中支持部分常用参数及其说明如下:
| 参数 | 类型 | 描述 |
|---|---|---|
| compatVector | string | 兼容模式设置,只能设置为mysql和yashan。 |
| connectTimeout | string | 建立连接时,创建socket连接的超时时间,单位为s。不配置时默认为10s。 |
| socketTimeout | string | 获取connection后,TCP通信过程中,客户端等待服务端返回数据的超时时间,单位为s。不配置时默认为0s,一直等待。 |
| loginTimeout | string | 创建socket成功后,进行登录认证时,客户端等待服务端返回数据的超时时间,单位为s。不配置时默认为300s。 |
| serverMode | string | 指定连接模式,可选值为shared(共享服务器模式,默认值)和dedicated(专用服务器模式)。 |
| autoCommit | string | 是否开启自动提交事务,TRUE表示开启,FALSE表示不开启,默认为TRUE。在mysql模式下,是否自动提交事务还受数据库服务端系统变量AUTOCOMMIT控制。 |
| mapDateToTimestamp | string | 是否开启日期转时间类型,TRUE表示开启,FALSE表示不开启,默认为FALSE。 |
| allowMultiStmt | string | 是否开启支持多SQL,TRUE表示开启,FALSE表示不开启,默认为FALSE。开启后可同时传入多条SQL语句,SQL语句间用分号隔开。 |
示例:
// URL连接配置
jdbc:yasdb://192.168.1.2:1688/database_name?compatVector=mysql
//URL多参数配置:
// 配置mysql模式连接,同时设置连接超时和socket超时
jdbc:yasdb://192.168.1.2:1688/database_name?compatVector=mysql&connectTimeout=60&socketTimeout=120
使用YashanDB JDBC连接mysql模式示例:
import com.yashandb.jdbc.YasDataSource;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class MysqlModeConnectionExample {
private static final String URL =
"jdbc:yasdb://192.168.1.2:1690/database_name?compatVector=mysql";
private static final String USER = "***";
private static final String PASSWORD = "***";
public static Connection getConnection()
throws SQLException, ClassNotFoundException {
Class.forName("com.yashandb.jdbc.Driver");
return DriverManager.getConnection(URL, USER, PASSWORD);
}
public static Connection getDataSourceConnection()
throws SQLException {
YasDataSource dataSource = new YasDataSource();
dataSource.setURL(URL);
return dataSource.getConnection(USER, PASSWORD);
}
public static void main(String[] args) {
try (Connection connection = getConnection();
Connection dsConnection = getDataSourceConnection()) {
System.out.println("DriverManager connection succeed!");
System.out.println("Database product name: "
+ connection.getMetaData().getDatabaseProductName());
System.out.println("SELECT 1 result: " + queryOne(connection));
System.out.println("DataSource connection succeed!");
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
private static int queryOne(Connection connection) throws SQLException {
try (Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT 1")) {
resultSet.next();
return resultSet.getInt(1);
}
}
}
正常情况下,程序输出如下:
DriverManager connection succeed!
Database product name: mysql
SELECT 1 result: 1
DataSource connection succeed!
Note:
在mysql模式下,事务自动提交行为由客户端参数autoCommit和数据库服务端系统变量AUTOCOMMIT共同决定。若服务端未开启自动提交但客户端开启,最终表现仍为不自动提交。建议将服务端配置与客户端配置的自动提交配置保持一致。
# 使用MySQL官方JDBC驱动连接mysql模式
MySQL Connector/J是MySQL官方JDBC驱动,驱动类名为com.mysql.cj.jdbc.Driver。连接YashanDB的mysql模式时,也可以使用MySQL官方驱动按MySQL连接方式建立连接。
Note:
当前环境下,MySQL官方驱动连接需要在URL中显式配置
allowPublicKeyRetrieval=true。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class MysqlOfficialDriverConnectionExample {
private static final String URL =
"jdbc:mysql://192.168.1.2:1692/database_name?useSSL=false&allowPublicKeyRetrieval=true";
private static final String USER = "***";
private static final String PASSWORD = "***";
public static void main(String[] args) {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
try (Connection connection =
DriverManager.getConnection(URL, USER, PASSWORD);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT 1")) {
resultSet.next();
System.out.println("Product name: "
+ connection.getMetaData().getDatabaseProductName());
System.out.println("SELECT 1 result: " + resultSet.getInt(1));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
正常情况下,程序输出如下:
Product name: MySQL
SELECT 1 result: 1

