更新时间:2025-08-19 GMT+08:00
完整示例
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class StreamQueryTest { // 连接数据库。 public static Connection getConnection() throws ClassNotFoundException, SQLException { String driver = "com.huawei.gaussdb.jdbc.Driver"; // 指定数据库sourceURL($ip、$port、database自行修改),连接参数enableStreamingQuery设置为true。 String sourceURL = "jdbc:gaussdb://$ip:$port/database?enableStreamingQuery=true"; // 用户名和密码从环境变量中获取。 String userName = System.getenv("EXAMPLE_USERNAME_ENV"); String password = System.getenv("EXAMPLE_PASSWORD_ENV"); Class.forName(driver); return DriverManager.getConnection(sourceURL, userName, password); } public static void main(String[] args) { String selectSql = "select * from tab_test order by id asc limit ?"; // 使用try-with-resources语法进行资源释放。 try (Connection conn = getConnection(); PreparedStatement preparedStatement = conn.prepareStatement(selectSql, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)) { preparedStatement.setInt(1, 100000); // 执行流式查询,将fetchSize设置为Integer.MIN_VALUE,再执行executeQuery查询数据。 preparedStatement.setFetchSize(Integer.MIN_VALUE); int totalCount = 0; try (ResultSet resultSet = preparedStatement.executeQuery()) { while (resultSet.next()) { // 处理查询结果,示例代码仅打印部分查询结果和数据总条数。 if (totalCount++ < 5) { System.out.println("row:" + resultSet.getRow() + ",id :" + resultSet.getInt(1)); } } System.out.println("totalCount:" + totalCount); } } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } } }
结果验证
- 将gaussdbjdbc.jar和完整示例中StreamQueryTest.java放入同一目录。
- 编译并执行示例代码,执行时设置JVM最大堆内存为16MB。
javac -classpath ".:gaussdbjdbc.jar" StreamQueryTest.java java -Xmx16M -classpath ".:gaussdbjdbc.jar" StreamQueryTest
- 示例代码可正常运行,不出现内存溢出错误。执行流式查询时,每次结果集中只保留一条数据,resultSet.getRow()返回值为1。因此代码执行结果如下:
row:1,id :1 row:1,id :2 row:1,id :3 row:1,id :4 row:1,id :5 totalCount:100000
回退方法
- 关闭单条语句的流式查询功能:删除Statement、PreparedStatement的setFetchSize(Integer.MIN_VALUE)。
- 关闭当前连接的流式查询功能:连接参数enableStreamingQuery设置为false。
父主题: 操作步骤