来自服务器;SQL,arrayList |到客户端;桌面视图

来自服务器;SQL,arrayList |到客户端;桌面视图,sql,arraylist,javafx,tableview,fxml,Sql,Arraylist,Javafx,Tableview,Fxml,我正在尝试使用JavaFXTableView查看SQL数据库表 我在服务器上有一个DBHandler类,它有一个从表中选择所有项的方法,然后我将这些值存储在resultSet中。然后,我使用while循环将resultSet的内容添加到object class Room的arrayList中。然后通过套接字将arrayList发送到客户端 客户机将该对象作为Room类的实例读取,然后将该对象添加到另一个arrayList,该arrayList添加到observableList,observabl

我正在尝试使用JavaFXTableView查看SQL数据库表

我在服务器上有一个DBHandler类,它有一个从表中选择所有项的方法,然后我将这些值存储在resultSet中。然后,我使用while循环将resultSet的内容添加到object class Room的arrayList中。然后通过套接字将arrayList发送到客户端

客户机将该对象作为Room类的实例读取,然后将该对象添加到另一个arrayList,该arrayList添加到observableList,observableList用于将数据添加到表视图

但是,代码/逻辑不起作用。在客户端,我得到一个“java.lang.ClassCastException:java.util.ArrayList不能转换到文件室”错误

客户端:FXMLController::

public class FXMLControl implements Initializable {
    @FXML private TableView tblRooms;
    @FXML private TableColumn roomNo;
    @FXML private TableColumn capacity;
    @FXML private TableColumn type;

    @FXML private void onViewRooms(ActionEvent event) throws IOException {
        MainApp main = new MainApp();
        main.viewRooms();
        tblRooms.setEditable(true);
        ObservableList<Room> listo = FXCollections.observableArrayList(main.rooms);
        tblRooms.setItems(listo);
}}
服务器:DBHandler::

public class DBHandler {
   ArrayList<Room> rooms = new ArrayList<Room>();

   void viewRooms() throws SQLException {
   //db connection setup
      String query = "SELECT * FROM ROOM";
      PreparedStatement preparedStatement = conn.prepareStatement(query);
      ResultSet rs = preparedStatement.executeQuery();
      while(rs.next()){
         rooms.add(new Room(rec.getInt("ROOMNO"),rec.getInt("CAPACITY"),rec.getString("TYPE")));
         }
      }}
用户应该能够按下屏幕上的按钮,服务器将收到“警报”以发回数据库中的内容。
任何帮助都将不胜感激

服务器向流发送单个列表:

oos.writeObject(databaseManager.rooms);
但当您收到该列表时,您尝试将其投射到一个房间:

由于ArrayList不是文件室,这显然会失败,出现类强制转换异常

只需直接转换到列表:

public class MainApp extends Application {
   List<Room> rooms ;

   public void viewRooms() throws IOException, ClassNotFoundException{
      String sendServer = "viewRooms");
      oos.writeObject(sendServer);
      oos.flush();

      rooms = (List<Room>) ois.readObject();
   }  
}

正如您所描述的,您正在通过流发送一个ArrayList。所以当你收到它时,你不能将它投射到一个房间。@James\u D但是我如何发送多个房间类的对象呢?你已经发送了多个对象,不是吗?您发送的是一个包含多个房间的列表,不是吗?@James_D,但不知道我接收/发送了多少。您只发送了一个列表。感谢您的回复,但是在实现上述^之后,它似乎只需要处理而不需要处理值。即Room@61951e4a, Room@1b8db140, Room@384f3d21@哲米认为这是一个完全不同的问题。只要在这个网站上做一些基础研究就可以找到解决方案。
public class Room implements Serializanle {
   private int roomNo;
   private int capacity;
   private String type;
// contructors ...
// getter and setter methods
}
oos.writeObject(databaseManager.rooms);
Room roomer = (Room) ois.readObject();
public class MainApp extends Application {
   List<Room> rooms ;

   public void viewRooms() throws IOException, ClassNotFoundException{
      String sendServer = "viewRooms");
      oos.writeObject(sendServer);
      oos.flush();

      rooms = (List<Room>) ois.readObject();
   }  
}