При использовании свинга все работает нормально.
String sql= "SELECT idrepair as '№',"
+ "case when repairStatus in (0) then 'Not Done' "
+ "when repairStatus in (1) then 'Closed' "
+ "when repairStatus in (2) then 'Open' "
+ "else 'Unknown' end as 'Status'"
+ "FROM repairjournal";
Я просто хочу новый пользовательский интерфейс с использованием JavaFX, так что вот мой код, я бы сказал, что мои усилия:
private void loadTableViewRepList(ObservableList oblist, Connection conn, TableView table) {
oblist.clear();
try {
String sql = "SELECT * FROM repairjournal";
pst = conn.prepareStatement(sql);
rs = pst.executeQuery();
while (rs.next()) {
oblist.add(new ModelTableRepairList(
rs.getString("idrepair"),
rs.getString("case when repairStatus in (0) then 'Not Done' "
+ "when repairStatus in (1) then 'Closed' "
+ "when repairStatus in (2) then 'Open' "
+ "else 'Unknown' end ")
));
}
table.setItems(oblist);
} catch (SQLException ex) {
Logger.getLogger(RepairListController
.class.getName()).log(Level.SEVERE, null, ex);
}
}
или
private void loadTableViewRepList(ObservableList oblist, Connection conn, TableView table) {
oblist.clear();
try {
String sql = "SELECT idrepair,
case when repairStatus in (0) then
'Not Done.' when repairStatus in (1) then
'Closed' when repairStatus in (2) then 'Open'
else 'Unknown' end as 'Status' FROM repairjournal";
pst = conn.prepareStatement(sql);
rs = pst.executeQuery();
while (rs.next()) {
oblist.add(new ModelTableRepairList(
rs.getString("idrepair"),
rs.getString("repairStatus")
));
}
table.setItems(oblist);
} catch (SQLException ex) {
Logger.getLogger(RepairListController
.class.getName()).log(Level.SEVERE, null, ex);
}
}
Main error is no such column: 'repairStatus'
Любые идеи, как это исправить? Да, я могу переименовывать данные, но у меня больше таблиц с такими данными в БД.
Вы пробовали rs.getString(0), rs.getString(1)?
Я бы посоветовал вам просто вернуть repairStatus (если он написан правильно), а затем выполнить логику case в коде. Возможно, вам придется посмотреть, как столбцы таблицы базы данных.
1. "У вас есть столбец с именем..." - нет 2. "Вы пробовали использовать rs.getString(0)" - да. Он возвращает числа. То же, что и Select * form имя_таблицы. Мне нужно изменить его на String. Статус «1» означает, что выполнено, 0 — нет. Для пользователей.
3. «а затем сделать логику случая в коде». - как это сделать? В качели я использую случай if-else для заполнения меток правильной строкой вместо чисел. Но как заполнить таблицу - я понятия не имею, как я сказал в качели - было легко. idrepair и repairStatus — имена столбцов
Что-то вроде: String outputString = ""; String tempRepairStatus = rs.getString("repairStatus); if (tempReparStatus.equals("0");{//ouptString = "Not Done"}else if (...){...}else if (...){...} oblist.add(new ModelTableRepairList( rs.getString("idrepair"), outputString ));
Я только что заметил, что вы сказали, что он возвращает числа. Вы должны использовать `int tempRepairStatus = rs.getInt(1); if (tempRepairStatus == 0){outString = "Не выполнено}...
java.sql.SQLException: такого столбца нет: «1» — это 1-е значение в строке. Поэтому я могу предположить, что данные должны быть сглажены после их получения, а не до.





getString("")возвращает информацию из столбца с именемString. У вас есть столбец с названием"case when repairStatus in (0) then 'Not Done' " + "when repairStatus in (1) then 'Closed' " + "when repairStatus in (2) then 'Open' " + "else 'Unknown' end "?