更新时间:2025-09-04 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。
父主题: 操作步骤