java - 无法使用 ResultSet 创建 ArrayList
问题描述
我正在尝试基于 ResultSet 创建一个 ArrayList。使用 while 循环遍历所有行,我只能获得第一行(使用 rs.next() 和 rs.first())以及最后一行(rs.last())。
public ArrayList retrieveFromDb(Statement myStmt){
try{
ArrayList<String> inner = new ArrayList<>();
String query = "SELECT * FROM product";
ResultSet rs = myStmt.executeQuery(query);
while(rs.next()){
System.out.println(rs.getString("barcode"));
inner.add(rs.getString("barcode"));
System.out.println("done");
return inner;
}
} catch (SQLException ex) {
Logger.getLogger(Product.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
我需要的是 ArrayList 从所有行中获取信息。
更新:看起来我未能通过过早返回列表来正确返回列表(如下面的答案中所指出的。)
解决方案
你返回你的名单太早了。把你的return
陈述移到最后。
重读 Oracle 教程,从结果集中检索和修改值。
此外,在使用完结果集后关闭它。
我们可以使您返回的列表更通用,List
而不是ArrayList
更具体的类型String
。
public List< String > retrieveFromDb( Statement myStmt ){
ArrayList<String> list = new ArrayList<>() ;
try{
String query = "SELECT * FROM product ;" ;
ResultSet rs = myStmt.executeQuery( query ) ;
while( rs.next() ){ // Looping the rows of the result set: first row, second row, third, fourth, and so on.
String barcode = rs.getString( "barcode" ) ;
list.add( rs.getString( "barcode" ) );
}
} catch (SQLException ex) {
Logger.getLogger(Product.class.getName()).log(Level.SEVERE, null, ex);
} finally {
if( Objects.nonNull( rs ) ) {
rs.close() ; // <--- Best to close your result set when done.
}
}
return list ;
}
更好的是,使用try-with-resources自动关闭您的结果集。
public List< String > retrieveFromDb( Statement myStmt ){
ArrayList<String> list = new ArrayList<>() ;
String query = "SELECT * FROM product ;" ;
try (
ResultSet rs = myStmt.executeQuery( query ) ;
)
{
while( rs.next() ){ // Looping the rows of the result set: first row, second row, third, fourth, and so on.
String barcode = rs.getString( "barcode" ) ;
list.add( rs.getString( "barcode" ) );
}
} catch (SQLException ex) {
Logger.getLogger(Product.class.getName()).log(Level.SEVERE, null, ex);
}
return list ;
}
提示:我建议始终使用分号正确终止您的 SQL 语句。没有它你可能会侥幸逃脱,但从长远来看,养成习惯可以防止出现问题。
推荐阅读
- r - Creating a subset, while removing NA's
- ruby-on-rails - Has_many through - Rails 5
- raku - Perl6 正则表达式与文件名不匹配结束 $ 字符
- python - percentile across dataframes, with missing values
- hyperledger-fabric - How retrieve all block transactions in the Hyperledger fabric?
- css - 为什么 wp 子主题中的 Css 文件代码写成注释行?
- python - Check how many unique sub lists in a list
- javascript - 用于循环异步等待的 Firebase 函数
- pandas - How do I get data out of XlsxWriter?
- fortran - How to translate from EQUIVALENCE to index offset