使用JDBC连接HetuEngine时开启seesion属性
【摘要】 本文基于MRS-3.1.0 版本的HetuEngine样例代码https://github.com/huaweicloud/huaweicloud-mrs-example/blob/mrs-3.1.0/src/hetu-examples/hetu-examples-security/src/main/java/com/huawei/presto/JDBCExampleBroker.java使...
本文基于MRS-3.1.0 版本的HetuEngine样例代码
使用JDBC连接HetuEngine的时候,有时需要开启session属性,只需简单两步
1. 创建PrestoConnection
2.使用PrestoConnection设置session属性
具体支持哪些session属性,可以在连接上HetuEngine后通过 show session;查看
我们以开启隐式转换为例来进行说明:
设置了隐式转换可以在登录HetuEngine后执行set session implicit_conversion=true;
其效果是在会话中,自动进行数据类型的转换。例如设置前执行
hetuengine:default> select 1='1';
Query 20210626_094452_00017_tqfsx@default@HetuEngine failed: line 1:9: '=' cannot be applied to integer, varchar(1)
select 1='1'
设置后执行
hetuengine:default> set session implicit_conversion=true;
SET SESSION
hetuengine:default> select 1 = '1';
_col0
-------
true
(1 row)
现在我们通过设置jdbc连接来开启这个session属性,代码如下:
//开启隐式转换
public class JDBCExampleBroker {
private static Properties properties = new Properties();
private static void init() throws ClassNotFoundException {
properties.setProperty("user", "YourUserName");
properties.setProperty("password", "YourPassword");
Class.forName("io.prestosql.jdbc.PrestoDriver");
}
public static void main(String[] args) throws ClassNotFoundException {
String url = "jdbc:presto://{yourHSBrokerIp}:29860/hive/default?serviceDiscoveryMode=hsbroker";
String sql = "select 1 = \'1\'";
init();
try {
PrestoConnection connection = DriverManager.getConnection(url, properties).unwrap(PrestoConnection.class)
connection.setSessionProperty("implicit_conversion","true");//注释掉后,代码抛出SQL异常 “ '=' cannot be applied to integer, varchar(1) ”
PreparedStatement statement = connection.prepareStatement(sql.trim());
ResultSet resultSet = statement.executeQuery();
Integer colNum = resultSet.getMetaData().getColumnCount();
while (resultSet.next()) {
for (int i = 1; i <= colNum; i++) {
System.out.println(resultSet.getString(i) + "\t");
}
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
执行结果如下:
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)