2016-10-04 1 views
0

У меня есть некоторые проблемы, пытающиеся понять, почему значение переписывается в одну и ту же строку таблицы и столбец из Tableview, как только один считыватель RFID обнаруживается у читателя.Tableview java display next row database

Все, что я хотел, это убедиться, что все данные могут отображать следующую доступную строку, которая кажется, что я не мог решить вопрос. Надеюсь, вы, ребята, можете помочь. Благодаря

Вот моя декларация таблиц

public class tableview extends Application implements Initializable { 

    @FXML 
    private TableView<UserDetails> table; 
    @FXML 
    private TableColumn<UserDetails, String> epc; 
    @FXML 
    private TableColumn<UserDetails, String> modCode; 
    @FXML 
    private TableColumn<UserDetails, String> modClass; 
    @FXML 
    private TableColumn<UserDetails, String> modName; 
    @FXML 
    private TableColumn<UserDetails, String> timestamp; 




    public void initialize(URL location, ResourceBundle resources) { 

     epc.setCellValueFactory(new PropertyValueFactory<>("epcNo")); 
     modCode.setCellValueFactory(new PropertyValueFactory<>("moduleCode")); 
     modClass.setCellValueFactory(new PropertyValueFactory<>("moduleClass")); 
     modName.setCellValueFactory(new PropertyValueFactory<>("moduleName")); 
     timestamp.setCellValueFactory(new PropertyValueFactory<>("timestamp")); 

public synchronized void moduleInfo(String epcString) { 
     try { 
      conn = db.getConnection(); 
      int i = 0; 
      ResultSet rs = conn.createStatement() 
        .executeQuery("SELECT * FROM module_info_table where rfid_tag_id = " + epcString); 

      while (rs.next()) { 
       String modulecode = rs.getString("module1_code"); 
       String moduleclass = rs.getString("module_class"); 
       String modulename = rs.getString("module1_name"); 
       String epc = rs.getString("rfid_tag_id"); 
       String timestamp = rs.getString("last_updated"); 

       System.out.println(modulecode); 
       if (epcString.equals(epc)) { 
        data2 = FXCollections.observableArrayList(); 
        data2.add(new UserDetails(epc, modulecode, moduleclass, modulename, timestamp)); 
       } 
      } 
      table.setItems(data2); 
      table.refresh(); 

      db.closeConn(); 
     } catch (Exception e) { 
      System.out.println(e); 

     } 

    } 
public class PrintListener implements ReadListener { 
    @Override 
    public void tagRead(Reader r, TagReadData tr) { 

     try { 

      String epcString = tr.getTag().epcString(); 

      if (!map.containsKey(epcString)) { 


       moduleInfo(epcString); < -- call to here 


      } 
      table.setItems(data); 
      table.refresh(); 

     } catch (Exception e) { 
      System.out.println(e); 
     } 
    } 

} 

Это мой TableView:

RFID TAG: 45

EPC  Module Code Module Class  Module Name   TimeStamp 
    45  ET123  DCPE/FT/5D  Computer System  Mon Oct 4 01:13:23am 
    -   -    -     -     - 
    -   -    -     -     - 

Новый RFID Tag: 100 (это будет перезаписывать предыдущие записи)

EPC  Module Code Module Class  Module Name   TimeStamp 
    100  ET468  DEEE/FT/8G  Computer Science  Mon Oct 4 01:13:23am 
    -   -    -     -     - 
    -   -    -     -     - 

Как вы можете видеть изображения ниже: Первая RFID метка обнаружена, и он будет отображать содержимое, когда он совпадает с базой данных тузд

После того, как новый RFID метка будучи обнаруженным, последняя RFID тег Заменяет старые записи, которые Я не хочу, чтобы это произошло.

Обратите внимание, что в представлении таблицы есть много столбцов и строк, которые не показаны, потому что мне пришлось обрезать, которые занимали много места.

ответ

0
public void initialize(URL location, ResourceBundle resources) { 

    data2 = FXCollections.observableArrayList(); 

     epc.setCellValueFactory(new PropertyValueFactory<>("epcNo")); 
     modCode.setCellValueFactory(new PropertyValueFactory<>("moduleCode")); 
     modClass.setCellValueFactory(new PropertyValueFactory<>("moduleClass")); 
     modName.setCellValueFactory(new PropertyValueFactory<>("moduleName")); 
     timestamp.setCellValueFactory(new PropertyValueFactory<>("timestamp")); 

Я вы тестировали размещение наблюдаемого списка здесь, и это сработало! Теперь я знаю, что data2 должен быть объявлен до While ((rs.next)) Loop

0

Вы перезапись data2 здесь:

data2 = FXCollections.observableArrayList(); 

удалить его и поставить его здесь

public synchronized void moduleInfo(String epcString) { 
    try { 
     data2 = FXCollections.observableArrayList(); 
     conn = db.getConnection(); 
     int i = 0; 
     ResultSet rs = conn.createStatement() 
       .executeQuery("SELECT * FROM module_info_table where rfid_tag_id = " + epcString); 

     while (rs.next()) { 
      String modulecode = rs.getString("module1_code"); 
      String moduleclass = rs.getString("module_class"); 
      String modulename = rs.getString("module1_name"); 
      String epc = rs.getString("rfid_tag_id"); 
      String timestamp = rs.getString("last_updated"); 

      System.out.println(modulecode); 
      if (epcString.equals(epc)) { 

       data2.add(new UserDetails(epc, modulecode, moduleclass, modulename, timestamp)); 
      } 
     } 
     table.setItems(data2); 
     table.refresh(); 

     db.closeConn(); 
    } catch (Exception e) { 
     System.out.println(e); 

    } 

теперь должен быть fixxed, если им не слепая: P

+0

Он все еще дал мне те же результаты \ – Atrix

+0

Спасибо за подсказку я, наконец, решить вопрос – Atrix

+0

Молодцы;) даже если я не исправил это –