Java集成presto查询方式

 更新时间:2022年06月20日 10:19:19   作者:luoyuan323  
这篇文章主要介绍了Java集成presto查询方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Java集成presto查询

1.pom文件引入相关jar

    <dependency>
            <groupId>com.facebook.presto</groupId>
            <artifactId>presto-jdbc</artifactId>
            <version>0.234.1</version>
        </dependency>

2.application.yml配置presto相关

presto:
  url: xxxxxx
  username: root
  password: root
  port: 8088

3.获取连接与测试

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");
            //props.setProperty("SSLTrustStorePath", SSLTrustStorePath);
            //props.setProperty("SSLTrustStorePassword", SSLTrustStorePassword);
            jdbcurl = String.format("jdbc:presto://%s:%s/", server, port);
        }
        conn = DriverManager.getConnection(jdbcurl, props);
        /*设置连接的数据源类型
         * 示例:mysql、hive
         */
        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();
            // 遍历ResultSet中的每条数据
            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;
    }
}

Java程序访问presto

pom.xml中引入presto-jdbc

<dependency>
<groupId>com.facebook.presto</groupId>
<artifactId>presto-jdbc</artifactId>
<version>0.267</version>
</dependency>
/**
 * @ Author zhangsf
 * @CreateTime 2022/1/6 - 10:00 PM
 */
package presto;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
 
public class PrestoJdbcDemo {
    public static void main(String[] args) throws  Exception{
        //class.forname
        try {
            Class.forName("com.facebook.presto.jdbc.PrestoDriver");
        }catch (ClassNotFoundException e){
            e.printStackTrace();
        }
        //若presto没有设置SSL认证,只需填写用户名,不需要填写密码。
        Connection connection = DriverManager.getConnection("jdbc:presto://localhost:8080/mysql/tp_music","root",null);
        Statement stmt = connection.createStatement();
        ResultSet rs = stmt.executeQuery("select * from mysql.tp_music.singer limit 3");
        while (rs.next()) {
            System.out.println("name:"+rs.getString(2)+"  birth:"+rs.getString(5)+"  location:"+rs.getString(6));
        }
        rs.close();
        connection.close();
    }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • JDK8中的HashMap初始化和扩容机制详解

    JDK8中的HashMap初始化和扩容机制详解

    这篇文章主要介绍了JDK8中的HashMap初始化和扩容机制,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • JDBC对MySQL数据库布尔字段的操作方法

    JDBC对MySQL数据库布尔字段的操作方法

    这篇文章主要介绍了JDBC对MySQL数据库布尔字段的操作方法,实例分析了JDBC操作mysql布尔字段的原理与实现技巧,需要的朋友可以参考下
    2015-02-02
  • Mybatis与Hibernate的区别

    Mybatis与Hibernate的区别

    以前没怎么用过mybatis,只知道与hibernate一样是个orm数据库框架。随着使用熟练度的增加,发现它与hibernate区别是非常大的感兴趣的朋友通过本文一起学习吧
    2016-01-01
  • Mybatis Plus整合PageHelper分页的实现示例

    Mybatis Plus整合PageHelper分页的实现示例

    这篇文章主要介绍了Mybatis Plus整合PageHelper分页的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • java web实现简单留言板功能

    java web实现简单留言板功能

    这篇文章主要为大家详细介绍了java web实现简单留言板功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • 深入浅出了解happens-before原则

    深入浅出了解happens-before原则

    一提到happens-before原则,就让人有点“丈二和尚摸不着头脑”。这个涵盖了整个JMM中可见性原则的规则,究竟如何理解,把我个人一些理解记录下来。下面可以和小编一起学习
    2019-05-05
  • RabbitMQ简单队列实例及原理解析

    RabbitMQ简单队列实例及原理解析

    这篇文章主要介绍了RabbitMQ简单队列实例及原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 如何利用MyBatisX插件自动生成代码

    如何利用MyBatisX插件自动生成代码

    这篇文章主要介绍了如何利用MyBatisX插件自动生成代码,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Spring Data JPA 建立表的联合主键

    Spring Data JPA 建立表的联合主键

    这篇文章主要介绍了Spring Data JPA 建立表的联合主键。本文详细的介绍了2种方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-04-04
  • TransmittableThreadLocal解决线程间上下文传递烦恼

    TransmittableThreadLocal解决线程间上下文传递烦恼

    这篇文章主要为大家介绍了TransmittableThreadLocal解决线程间上下文传递烦恼详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11

最新评论