首页 > 其他分享 >dremio jdbc 访问最好使用链接池工具

dremio jdbc 访问最好使用链接池工具

时间:2024-01-17 10:55:52浏览次数:36  
标签:dremio jdbc executeQuery Statement close com 链接

昨天在碰到一个dremio jdbc 比较奇怪的问题,按照了标准的jdbc 操作(建立链接,创建Statement,处理数据,关闭Statement,关闭连接)
当进行多次执行(多次建立连接操作)发现dremio 有一个操作异常,造成数据表创建有问题(事务不完整)

参考代码

 
private static void v3() {
        try {
            String sql = " select * from pg.public.sensor";
            String url = "jdbc:dremio:direct=localhost:31011;schema=sys";
            Connection conn1 = DriverManager.getConnection(url, "xxxx", "xxxxx");
            //3.获取Statement对象
            Statement statement1 = conn1.createStatement();
            statement1.executeQuery(sql);
            statement1.close();
            conn1.close();
 
            String sql2 = " select * from pg.public.sensor";
            Connection conn2 = DriverManager.getConnection(url, "dalong", "dalong123");
            Statement statement2 = conn2.createStatement();
            statement2.executeQuery(sql2);
            statement2.close();
            conn2.close();
   
            String sql3 = " select * from pg.public.sensor";
            Connection conn3 = DriverManager.getConnection(url, "dalong", "dalong123");
            Statement statement3 = conn3.createStatement();
            statement3.executeQuery(sql3);
            statement3.close();
            conn3.close();
 
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

注意上边我们没有执行进行数据的处理statement.executeQuery 部分

错误信息

Query cancelled by user 'xxxxx'

解决方法

通过简单跟进代码发现,提示信息是争取的,因为我们进行了 statement 的close 内部使用了游标,dremio 发现如果内部执行还没完成的时候执行
进行close 会通过dremio client 发送一个cancel query 的rpc 请求(dremio 内部是基于job 调度的,具体任务什么时是否完成不太确定),如果进行了
数据查询获取,这样dremio jdbc 就可以知道啥时数据是完成的(内部通过游标遍历),然后close 肯定也没有问题,最好的实践方法我们是通过连接池
工具,这样可以进行连接的服用,确保连接不会出现问题,同时也有利于资源的管理

连接池使用

可以通过hikari 包, 当然实际使用中我们一般都是集成服务集成的(比如spring boot) 基于datasource 是更好的选择

参考资料

https://github.com/brettwooldridge/HikariCP
https://github.com/dremio/dremio-oss/blob/master/client/jdbc/src/main/java/com/dremio/jdbc/impl/DremioCursor.java#L427
https://github.com/dremio/dremio-oss/blob/master/client/jdbc/src/main/java/com/dremio/jdbc/impl/DremioResultSetImpl.java

标签:dremio,jdbc,executeQuery,Statement,close,com,链接
From: https://www.cnblogs.com/rongfengliang/p/17969410

相关文章

  • Spring-jdbc
    1引入相关依赖<dependencies><!--springjdbcSpring持久化层支持jar包--><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><versi......
  • CMake链接DLL可行实践
    DLL作为Windows下的动态库格式,其同Linux等平台的动态库稍有不同,比如对MSVC编译器需要导出符号等。本文简述一种情况,即仅有dll文件及对应头文件时应当如何在CMake中完成链接。首先必须提示的一点是,DLL文件是程序运行时会调用的文件。编译器在编译链接时并不关心DLL文件在哪,而是会......
  • dremio 测试特性api 的开启&外部profile查看
    以前简单说过基于代码修改开启test的外部profile能力,实际上官方是由配置参数的,可以在启动的时候添加到配置中配置添加dremio.conf文件debug{allowTestApis:true}检查选项时候开启的一个技巧使用arthas命令使用了arthas的vmtool也可以结......
  • 网址链接跳转外部安全提醒代码
    网页的安全性优化是一个越来越被开发者重视的问题,当本站链接点击跳转到第三方外链接时,要弹框提示信息,需要支持jquery引用。<!DOCTYPEhtml> <html> <head> <metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"> <metahttp-equiv="X-UA-Compat......
  • jmeter jdbc操作myql数据库及mysql驱动下载
     mysql驱动下载https://dev.mysql.com/downloads/connector/j/   1、先安装mysql的驱动mysql-connector-java-5.1.7-bin.jar配置jdbc的connectionconfigurationDatabaseUrl:jdbc:mysql://xxx.xxx.xxx.xxx:3306/test?allowMultiQueries=true&serverTimezone=UTC&c......
  • JMeter-JDBC,连接数据库增、删、改、查操作
     1、Callablestatement这是一个可调用语句类型,只要语法正确,任何语句,再多的条数都能支持,所以查询或者插入数据,进行多个sql语句操作,那么就要选择Callablestatement。插入多条sql语句,则要现在Callablestatement。  上面是插入单条数据,使用不方便,下面就行参数化1.加一......
  • 轻松导航:教你在Excel中添加超链接功能
    前言超链接是指在网页或电子文档中常见的元素,它的主要作用是将一个文本或图像与另一网页、文件或资源链接起来,从而使用户能够通过点击该链接跳转到目标资源、超链接可以起到导航以及引用的作用。超链接通常有以下几种用途:网页链接文档链接内部定位链接电子邮件链接在Java......
  • [Python急救站]学生管理系统链接数据库
    相信很多人在初学Python的时候,经常最后作业就是完成一个学生管理系统,但是我们来做一个完美的学生管理系统,并且将数据储存到数据库里。我们先看看我们的数据库怎么设置。首先呢,我选择用的是SQLServer然后,我们的数据库名称为学生管理系统 接着,新建一张表,我设置表的名称为学生......
  • 动态链接库的生成和使用
    1、当前目录/home/xuanmiao/Demo/LSPT/Test创建文件prime.h和prime.cprime.hintisprime(longintnumber);prime.cintisprime(longintnumber){longintj;intprime=1;/*Testifthenumberisdivisible,starting*from2*/for(j=2;......
  • dremio dbt + nessie 集成profile 简单说明
    我最近写了一个简单的关于dremio集成nessie以及dbt玩法的说明,以下简单说明下dbt如何配置配置说明对于配置实际上与以前一些介绍类似,集成nessie的使用与其他是类似的,只是集成nessie之后我们的数据开发模型上就有了实际的版本了(dbt集成git之后也会包含版本,是属于模型代码......