JdbcTemplate return 如果 isLast()
JdbcTemplate return if isLast()
我正在使用 JdbcTemplate 向由 Spring Data REST 创建的数据库发出请求。请求的数据将由 angularJs 管理。
在我的 jdbc.query() 循环中,我正在构建一个列表,如果传递了最后一个 ResultSet,则应该 returned。
但是由于值必须 return 在条件之外的原因,我必须 return null 每次我的 ResultSet 的循环将通过。
那么有没有办法让它变得更好?
提前致谢
我的代码:
List list = new ArrayList();
public List findById(Long id){
return jdbc.query(
sql,
new Object[]{id},
(ResultSet rs, int rowNum) -> {
// code for building list
if(rs.isLast()){
return list;
}
return null;
}
)
}
1) 据我所知,return null 是一种不好的做法。最好return空列表。
2) 如果您需要迭代结果和构建列表,您可以使用(人们通常这样做):
return jdbcTemplate
.query( SELECT_ALL_USERS, new ResultSetExtractor<List<User>>() {
public List<User> extractData( ResultSet resultSet )
throws SQLException, DataAccessException
{
List<User> list = new ArrayList<User>();
while ( resultSet.next() ) {
User user = new User(...);
list.add( user );
}
return list;
}
} );
3) 如果你想对最后的结果做一些事情,不需要遍历整个结果集,你可以使用
List list = new ArrayList();
if(!resultSet.isBeforeFirst()){
resultSet.afterLast();
resultSet.previous();
User user = new User;
list.add(user);
}
return list;
afterLast() Moves the cursor to the end of this ResultSet object, just
after the last row.
previous() Moves the cursor to the previous row in this ResultSet
object.
isBeforeFirst returns
true if the cursor is before the first row; false if the cursor is at
any other position or the result set contains no rows
有用link:
https://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html
要将参数传递给您的查询,您可以使用:
public User getUserByEmail( final String email )
{
return jdbcTemplate.query( SELECT_USER_BY_EMAIL, new PreparedStatementSetter() {
public void setValues( PreparedStatement preparedStatement )
throws SQLException
{
preparedStatement.setString( 1, email );
}
}, new ResultSetExtractor<User>() {...}
} );
}
我正在使用 JdbcTemplate 向由 Spring Data REST 创建的数据库发出请求。请求的数据将由 angularJs 管理。 在我的 jdbc.query() 循环中,我正在构建一个列表,如果传递了最后一个 ResultSet,则应该 returned。
但是由于值必须 return 在条件之外的原因,我必须 return null 每次我的 ResultSet 的循环将通过。
那么有没有办法让它变得更好?
提前致谢
我的代码:
List list = new ArrayList();
public List findById(Long id){
return jdbc.query(
sql,
new Object[]{id},
(ResultSet rs, int rowNum) -> {
// code for building list
if(rs.isLast()){
return list;
}
return null;
}
)
}
1) 据我所知,return null 是一种不好的做法。最好return空列表。
2) 如果您需要迭代结果和构建列表,您可以使用(人们通常这样做):
return jdbcTemplate
.query( SELECT_ALL_USERS, new ResultSetExtractor<List<User>>() {
public List<User> extractData( ResultSet resultSet )
throws SQLException, DataAccessException
{
List<User> list = new ArrayList<User>();
while ( resultSet.next() ) {
User user = new User(...);
list.add( user );
}
return list;
}
} );
3) 如果你想对最后的结果做一些事情,不需要遍历整个结果集,你可以使用
List list = new ArrayList();
if(!resultSet.isBeforeFirst()){
resultSet.afterLast();
resultSet.previous();
User user = new User;
list.add(user);
}
return list;
afterLast() Moves the cursor to the end of this ResultSet object, just after the last row.
previous() Moves the cursor to the previous row in this ResultSet object.
isBeforeFirst returns true if the cursor is before the first row; false if the cursor is at any other position or the result set contains no rows
有用link: https://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html
要将参数传递给您的查询,您可以使用:
public User getUserByEmail( final String email )
{
return jdbcTemplate.query( SELECT_USER_BY_EMAIL, new PreparedStatementSetter() {
public void setValues( PreparedStatement preparedStatement )
throws SQLException
{
preparedStatement.setString( 1, email );
}
}, new ResultSetExtractor<User>() {...}
} );
}