首页 > 数据库 >解析JDBC使用查询MySQL【非流式、流式、游标】

解析JDBC使用查询MySQL【非流式、流式、游标】

时间:2024-12-07 14:56:39浏览次数:6  
标签:JDBC ResultSet 游标 流式 查询 ONLY preparedStatement

解析JDBC使用游标查询MySQL

使用jdbc查询MySQL数据库,如果使用游标或者流式查询的话,则可以有效解决OOM的问题,否则MySQL驱动就会把数据集全部查询出来加载到内存里面,这样在大数据的情况下会OOM的
不同的查询方式 ResultsetRows 的实现是不一样的!!!

流式查询【每次只取一条】

流式查询的条件是

  PreparedStatement preparedStatement = connection.prepareStatement("SELECT * from dwd_data_gen", ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
  // 每批拉取的数据量
  preparedStatement.setFetchSize(Integer.MIN_VALUE);

代码

  connection.setAutoCommit(false);
  PreparedStatement preparedStatement = connection.prepareStatement("SELECT * from dwd_data_gen", ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
  // 每批拉取的数据量
  preparedStatement.setFetchSize(Integer.MIN_VALUE);
  # 流式查询的时候,preparedStatement.executeQuery()并不会把数据取过来,而是调用resultSet.next()的时候 从服务端取一条数据过来。该方式不会出现OOM,因为每次都是只取一条数据
  ResultSet resultSet = preparedStatement.executeQuery();
  while (resultSet.next()) {
    i++;
  }

非流式查询【一次性全部查出来】

流式查询的条件不满足的时候就会在preparedStatement.executeQuery()的时候 把所有数据查出来
resultSet.next()只是从上面查出来的结果里面做判断而已,不会再从数据库取数据了

游标查询【每次取fetchSize条】

游标查询的条件是

jdbc的url里面加上useCursorFetch=true的参数

  connection.setAutoCommit(false);
  PreparedStatement preparedStatement = connection.prepareStatement("SELECT * from dwd_data_gen", ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
  // 每批拉取的数据量
  preparedStatement.setFetchSize(1024);

标签:JDBC,ResultSet,游标,流式,查询,ONLY,preparedStatement
From: https://www.cnblogs.com/sxxs/p/18592173

相关文章

  • jdbc(3)
    1.抽象一个dao的父类。根据我们之前操作数据库表时,封装了很多的dao类,这些dao类他们具有很多相同的代码。如果我们反复写这些重复的代码相对比较麻烦。我们学过继承,是否可以把这些dao类的公共代码抽取到父类中,然后子类继承该父类。publicclassBaseDao{protectedPre......
  • jdbc(1)
    1.jdbc的概述JDBC(JavaDataBaseConnectivity)称为Java数据库连接,它是一种用于数据库访问的应用程序API接口,由一组用Java语言编写的类和接口组成,有了JDBC就可以用统一的语法对多种关系数据库进行访问,而不用担心其数据库操作语言的差异。有了JDBC,就不必为访问Mysql数据库专门......
  • Java流式编程(Stream API部分)
    一、流式编程在Java流式编程中,流(Stream)是一个抽象的概念,用于表示数据的序列。流提供了一种高级迭代的机制,允许你以声明式方式处理数据集合。1.1.流式编程概述流是一个元素序列,这些元素可以是集合中的元素,也可以是来自于数组、I/O通道、生成器函数等。Stream流的作用是结......
  • JDBC进阶
    JDBC进阶在使用JDBC操作数据库时,我们会发现数据都是零散的,明在数据库中是一行完整的数据,到了Java中变成了一个一个的变量,不利于维护和管理。而我们Java是面向对象的,一个表对应的是一个类,一行数据就对应的是Java中的一个对象,一个列对应的是对象的属性,所以我们要把数据存储......
  • 如何使用流式渲染技术提升用户体验
    什么是流式渲染?流式渲染主要思想是将HTML文档分块(chunk)并逐块发送到客户端,而不是等待整个页面完全生成后再发送。流式渲染不是什么新鲜的技术。早在90年代,网页浏览器就已经开始使用这种方式来处理HTML文档。在SPA(单页应用)流行的时代,由于SPA的核心是客户端动态地渲染内容......
  • JDBC入门
    JDBC入门​JDBC(JavaDatabaseConnectivity)是Java提供的一种标准API,用于连接和操作关系型数据库。它是Java程序和数据库之间的桥梁,允许开发人员通过Java代码与数据库交互,执行查询、更新和其他数据库操作。一、JDBC的快速入门官网下载数据库连接驱动jar包。https:......
  • JDBC连接数据库实现增删改查
    这里为了方便展览,我直接写到了一个类里面,其中也涉及了一些前端交互要注意其中的sql语句的对象,可以根据自己的数据库内容名称进行修改这个是原本的表importjavax.servlet.;importjavax.servlet.http.;importjavax.servlet.annotation.;importjava.io.IOException;import......
  • JDBC链接数据库
    1.首先我们需要下载mysql的官网jar包https://dev.mysql.com/downloads/connector/j/这个版本比较新然后打开idea创建一个项目下面是链接代码,记得看注释packagecom.stu.jdbc;//我的包的名字叫com.stu.jdbc,报错可以删除importjava.sql.*;publicclassJDBC{//这个类的名......
  • java与数据库连接学习,JDBC
    一、JDBC概述JDBC(JavaDataBaseConnectivity)是Java用于数据库访问的应用程序API接口,由一系列Java类和接口构成。它提供了统一的语法来操作多种关系型数据库,屏蔽了不同数据库操作语言的差异。这意味着开发人员无需为每种数据库编写特定的访问程序,大大提高了数据库访问......
  • ai大模型流式输出------基于SSE协议的长连接实现ax
    传统的http1.0请求开发,已经满足了我们日常的web开发。一般请求就像下图这样子,客服端发起一个请求(触发),服务端做出一个响应(动作):有时会有诸如实时刷新,实时显示的场景,我们往往是客户端定时发起请求,不断的尝试获取最新的数据。但是每次请求都会创建并释放一个新的连接,这样对于需要频繁......