import
com.alibaba.fastjson.JSONArray;
import
com.alibaba.fastjson.JSONObject;
import
com.sugon.xuanyuan.common.utils.StringUtils;
import
com.sugon.xuanyuan.service.dataprovider.utils.JdbcUtil;
import
org.springframework.beans.factory.annotation.Value;
import
org.springframework.context.annotation.Configuration;
import
java.sql.*;
import
java.util.Properties;
/**
* @Description:
* @author: luoy
* @date: 2020-06-24 09:45
*/
@Configuration
public
class
PrestoConnect {
@Value
(
"${presto.url}"
)
private
String server;
@Value
(
"${presto.port}"
)
private
String port;
@Value
(
"${presto.username}"
)
private
String username;
@Value
(
"${presto.password}"
)
private
String password;
private
Connection getConnection()
throws
Exception {
/**
* 功能:presto 通过 jdbc 连接
* 示例:jdbc:presto://host:port/
**/
String jdbcurl =
"jdbc:presto://"
+ server +
":"
+ port +
"/"
;
Connection conn ;
Properties props =
new
Properties();
Class.forName(
"com.facebook.presto.jdbc.PrestoDriver"
);
props.setProperty(
"user"
, username);
if
(StringUtils.isNotBlank(password)) {
props.setProperty(
"password"
, password);
props.setProperty(
"SSL"
,
"true"
);
jdbcurl = String.format(
"jdbc:presto://%s:%s/"
, server, port);
}
conn = DriverManager.getConnection(jdbcurl, props);
conn.setCatalog(
"hive"
);
return
conn;
}
public
JSONArray getDataAll(String sql)
throws
Exception {
JSONArray array =
new
JSONArray();
Statement ps =
null
;
ResultSet rs =
null
;
Connection con =
null
;
try
{
con = getConnection();
ps = con.createStatement();
rs = ps.executeQuery(sql);
ResultSetMetaData metaData = rs.getMetaData();
int
columnCount = metaData.getColumnCount();
while
(rs.next()) {
JSONObject jsonObj =
new
JSONObject();
for
(
int
i =
1
; i <= columnCount; i++) {
String columnName = metaData.getColumnLabel(i);
String value = StringUtils.isBlank(rs.getString(columnName)) ?
""
: rs.getString(columnName);
jsonObj.put(columnName, value);
}
array.add(jsonObj);
}
}
catch
(Exception e) {
throw
new
Exception(
"ERROR:"
+ e.getMessage(), e);
}
finally
{
JdbcUtil.close(rs, ps, con);
}
return
array;
}
}