Как заполнить TableView в JavaFX с использованием псевдонима

#sqlite #javafx

#sqlite #javafx

Вопрос:

При использовании swing все работает просто отлично.

 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);
                }
            }
  

Основная ошибка — нет такого столбца: ‘repairStatus’

Есть идеи, как это исправить? Да, я могу переименовывать данные, но у меня есть больше таблиц с такими данными в DB.

Комментарии:

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 " ?

2. Вы пробовали rs.getString(0), rs.getString(1) ?

3. Я бы посоветовал вам просто вернуть repairStatus (если оно написано правильно), а затем выполнить логику обращения в коде. Возможно, вам потребуется взглянуть, как столбцы таблицы вашей базы данных.

4. 1. «У вас есть столбец с именем …» — нет 2. «Вы пробовали rs.getString(0)» — да. Он возвращает числа. То же, что и Select * form tablename. Мне нужно изменить его на String. Статус ‘1’ означает, что это выполнено, 0 — нет. Для пользователей.

5. 3. «а затем выполните логику обращения в коде». — как это сделать? В swing я использую регистр if-else для заполнения меток правильной строкой вместо чисел. Но как заполнить Table — я понятия не имею, как я уже говорил в swing — было легко. idrepair и repairStatus — имена столбцов