gpt4 book ai didi

java - 无法使用 ResultSet 创建 ArrayList

转载 作者:太空宇宙 更新时间:2023-11-03 10:32:00 26 4
gpt4 key购买 nike

我正在尝试基于 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 教程,Retrieving and Modifying Values from Result Sets .

此外,close your result set使用完毕后。

我们可以使您的返回列表成为更通用的 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 语句。没有它你可能会逃脱,但从长远来看,养成习惯可以防止出现问题。

关于java - 无法使用 ResultSet 创建 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56314630/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com