EN
Spring Boot 2 - JdbcTemplate throws: java.sql.SQLException: Before start of result set
1 answers
4 points
I have trouble uring JdbcTemplate
query()
function getting single result from ResultSet
.
This is exception I got:
xxxxxxxxxx
1
java.sql.SQLException: Before start of result set
This is stack trace:
xxxxxxxxxx
1
java.sql.SQLException: Before start of result set
2
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) ~[mysql-connector-java-8.0.22.jar:8.0.22]
3
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) ~[mysql-connector-java-8.0.22.jar:8.0.22]
4
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89) ~[mysql-connector-java-8.0.22.jar:8.0.22]
5
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63) ~[mysql-connector-java-8.0.22.jar:8.0.22]
6
at com.mysql.cj.jdbc.result.ResultSetImpl.checkRowPos(ResultSetImpl.java:492) ~[mysql-connector-java-8.0.22.jar:8.0.22]
7
at com.mysql.cj.jdbc.result.ResultSetImpl.getObject(ResultSetImpl.java:1299) ~[mysql-connector-java-8.0.22.jar:8.0.22]
8
at com.mysql.cj.jdbc.result.ResultSetImpl.getLong(ResultSetImpl.java:823) ~[mysql-connector-java-8.0.22.jar:8.0.22]
9
at com.zaxxer.hikari.pool.HikariProxyResultSet.getLong(HikariProxyResultSet.java) ~[HikariCP-4.0.3.jar:?]
10
at chat.MessagesService.lambda$fetchMessages$1(MessagesService.java:215) ~[classes/:?]
11
at org.springframework.jdbc.core.JdbcTemplate$1QueryStatementCallback.doInStatement(JdbcTemplate.java:453) ~[spring-jdbc-5.3.13.jar:5.3.13]
12
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:381) ~[spring-jdbc-5.3.13.jar:5.3.13]
13
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:465) ~[spring-jdbc-5.3.13.jar:5.3.13]
14
...
SQL query I used:
xxxxxxxxxx
1
SELECT COUNT(*)
2
FROM `messages` m
3
WHERE (m.`removal_time` IS NULL)
My java source code:
xxxxxxxxxx
1
// import org.springframework.jdbc.core.JdbcTemplate;
2
3
// @Autowire
4
// private JdbcTemplate jdbcTemplate;
5
6
public Long getCount() {
7
String sqlQuery = "SELECT COUNT(*) \n" +
8
"FROM `messages` m \n" +
9
"WHERE (m.`removal_time` IS NULL)\n";
10
11
return this.jdbcTemplate.query(sqlQuery, (resultSet) -> (Long) resultSet.getLong(1));
12
}
1 answer
5 points
In the above case you need to call resultSet.next()
function before calling resultSet.getLong(1)
function.
Fixed source code:
xxxxxxxxxx
1
public Long getCount() {
2
String sqlQuery = "SELECT COUNT(*) \n" +
3
"FROM `messages` m \n" +
4
"WHERE (m.`removal_time` IS NULL)\n";
5
6
long rowsCount = this.jdbcTemplate.query(sqlQuery, (resultSet) -> {
7
if (resultSet.next()) {
8
return resultSet.getLong(1);
9
}
10
return 0L;
11
});
12
13
return rowsCount;
14
}
0 commentsShow commentsAdd comment