From d98b7cc14e4e0495bd94aca4a887a0714b586e9b Mon Sep 17 00:00:00 2001 From: Yanming Zhou Date: Mon, 21 Sep 2026 16:16:17 +0800 Subject: [PATCH] Add tests for querying row set using JdbcClient And polish `JdbcClientQueryTests` a bit. Signed-off-by: Yanming Zhou --- .../core/simple/JdbcClientQueryTests.java | 61 ++++++++++++++++--- 1 file changed, 52 insertions(+), 9 deletions(-) diff --git a/spring-jdbc/src/test/java/org/springframework/jdbc/core/simple/JdbcClientQueryTests.java b/spring-jdbc/src/test/java/org/springframework/jdbc/core/simple/JdbcClientQueryTests.java index 9597d2b1831c..c8b394ea2bd2 100644 --- a/spring-jdbc/src/test/java/org/springframework/jdbc/core/simple/JdbcClientQueryTests.java +++ b/spring-jdbc/src/test/java/org/springframework/jdbc/core/simple/JdbcClientQueryTests.java @@ -38,6 +38,7 @@ import org.springframework.core.convert.converter.Converter; import org.springframework.core.convert.support.GenericConversionService; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; +import org.springframework.jdbc.support.rowset.SqlRowSet; import org.springframework.util.NumberUtils; import static org.assertj.core.api.Assertions.assertThat; @@ -49,21 +50,22 @@ /** * @author Juergen Hoeller + * @author Yanming Zhou * @since 6.1 */ class JdbcClientQueryTests { - private DataSource dataSource = mock(); + private final DataSource dataSource = mock(); - private Connection connection = mock(); + private final Connection connection = mock(); - private PreparedStatement preparedStatement = mock(); + private final PreparedStatement preparedStatement = mock(); - private ResultSet resultSet = mock(); + private final ResultSet resultSet = mock(); - private ResultSetMetaData resultSetMetaData = mock(); + private final ResultSetMetaData resultSetMetaData = mock(); - private JdbcClient client = JdbcClient.create(dataSource); + private final JdbcClient client = JdbcClient.create(dataSource); @BeforeEach @@ -79,6 +81,26 @@ void setup() throws Exception { // Indexed parameters + @Test + void queryForRowSetWithIndexedParam() throws Exception { + given(resultSet.next()).willReturn(true, true, false); + given(resultSet.getObject(1)).willReturn(11, 12); + + SqlRowSet rowSet = client.sql("SELECT AGE FROM CUSTMR WHERE ID < ?") + .param(3).query().rowSet(); + + assertThat(rowSet.next()).isTrue(); + assertThat(rowSet.getInt("age")).as("First row is Integer").isEqualTo(11); + assertThat(rowSet.next()).isTrue(); + assertThat(rowSet.getInt("age")).as("Second row is Integer").isEqualTo(12); + + verify(connection).prepareStatement("SELECT AGE FROM CUSTMR WHERE ID < ?"); + verify(preparedStatement).setObject(1, 3); + verify(resultSet).close(); + verify(preparedStatement).close(); + verify(connection).close(); + } + @Test void queryForListWithIndexedParam() throws Exception { given(resultSet.next()).willReturn(true, true, false); @@ -243,7 +265,7 @@ void queryForOptionalWithIndexedParamAndRowMapper() throws Exception { .query((rs, rowNum) -> rs.getInt(1)) .optional(); - assertThat(value.get()).isEqualTo(22); + assertThat(value).contains(22); verify(connection).prepareStatement("SELECT AGE FROM CUSTMR WHERE ID = ?"); verify(preparedStatement).setObject(1, 3); verify(resultSet).close(); @@ -294,6 +316,27 @@ void queryForObjectWithIndexedParamAndList() { // Named parameters + @Test + void queryForRowSetWithNamedParam() throws Exception { + given(resultSet.next()).willReturn(true, true, false); + given(resultSet.getObject(1)).willReturn(11, 12); + + SqlRowSet rowSet = client.sql("SELECT AGE FROM CUSTMR WHERE ID < :id") + .param("id", 3) + .query().rowSet(); + + assertThat(rowSet.next()).isTrue(); + assertThat(rowSet.getInt("age")).as("First row is Integer").isEqualTo(11); + assertThat(rowSet.next()).isTrue(); + assertThat(rowSet.getInt("age")).as("Second row is Integer").isEqualTo(12); + + verify(connection).prepareStatement("SELECT AGE FROM CUSTMR WHERE ID < ?"); + verify(preparedStatement).setObject(1, 3); + verify(resultSet).close(); + verify(preparedStatement).close(); + verify(connection).close(); + } + @Test void queryForListWithNamedParam() throws Exception { given(resultSet.next()).willReturn(true, true, false); @@ -427,7 +470,7 @@ void queryForOptionalWithNamedParamAndRowMapper() throws Exception { .query((rs, rowNum) -> rs.getInt(1)) .optional(); - assertThat(value.get()).isEqualTo(22); + assertThat(value).contains(22); verify(connection).prepareStatement("SELECT AGE FROM CUSTMR WHERE ID = ?"); verify(preparedStatement).setObject(1, 3); verify(resultSet).close(); @@ -610,7 +653,7 @@ public BigInteger convert(String source) { return NumberUtils.parseNumber(source.substring(3), BigInteger.class); } }); - client = JdbcClient.create(new NamedParameterJdbcTemplate(dataSource), conversionService); + JdbcClient client = JdbcClient.create(new NamedParameterJdbcTemplate(dataSource), conversionService); AgeFieldHolder value = client.sql("SELECT AGE FROM CUSTMR WHERE ID = :id") .param("id", 3) .query(AgeFieldHolder.class).single();