Вы возвращаете свой список слишком рано. Переместите 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 точкой с запятой. Вы можете обойтись без него, но, сделав это привычкой, вы сможете избежать проблем в долгосрочной перспективе.