Вы не упомянули, было ли исключение обнаружено вашим блоком catch
.
То, что я вижу, может помешать продвижению цикла дальше первой строки, так это то, что в следующей строке будет NULL
первый столбец.
Действительно, если в 1-м столбце любой из строк, возвращаемых "select * from myTable"
, есть NULL
, то rs.getString(1).trim()
выдаст NullPointerException
, что прервет цикл.
Вы можете избежать этого, написав:
try {
ResultSet rs = Main.dbase.search("select * from myTable");
while(rs.next()) {
String result = rs.getString(1);
if (result != null) {
result = result.trim();
}
cmb.addItem(result);
}
rs.close();
} catch (Exception ex) {
System.out.println(ex);
}
Кроме того, я бы улучшил весь фрагмент кода, чтобы:
- убедитесь, что
rs
закрыто, даже если возникает исключение
- убедитесь, что мы видим полную трассировку стека любого исключения
- убедитесь, что
cmb
обновляется исключительно из EDT (правило Swing EDT)
- избегайте слишком большого количества вызовов в EDT путем агрегирования всех
addItems
в целом
Тогда вот что у вас будет:
ResultSet rs = null;
try {
final List<String> allItems = new ArrayList>String>();
rs = Main.dbase.search("select * from myTable");
while(rs.next()) {
String result = rs.getString(1);
if (result != null) {
result = result.trim();
}
allItems.add(result);
}
SwingUtilities.invokeLater(new Runnable() {
@Overrive public run() {
for (String item: allItems) {
cmb.addItem(item);
}
}
});
} catch (Exception ex) {
ex.printStacktrace();
} finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Конечно, некоторые части еще можно улучшить, например, я бы написал вспомогательный метод для закрытия ResultSet
, если это не null
, потому что этот код, вероятно, будет многократно использоваться во многих местах.