从服务器; SQL,arrayList |致客户;的TableView

时间:2018-04-02 18:26:32

标签: sql arraylist javafx tableview fxml

我试图使用JavaFX tableView查看SQL数据库表。

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

客户端将对象作为Room类的实例读取,该对象被添加到另一个arrayList,该arrayList被添加到observableList,后者用于将数据添加到Table视图。

但是,代码/逻辑不起作用。在客户端,我得到了一个java.lang.ClassCastException:java.util.ArrayList无法转换为Room'错误。

客户:FXMLController ::

public class MainApp extends Application {
   ArrayList<Room> rooms = new ArrayList<Room>();

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

      Room roomer = (Room) ois.readObject();
      rooms.add(roomer);
}}

客户:MainApp ::

public class server {

   public static void clientSession() throws IOException, ClassNotFoundException, SQLException{
      String userInput = ois.readObject();

      switch(userInput){
         case "viewRooms":
         DBHandler dbhandler = new DBHandler(username,password,url);
         dbhandler.viewRooms();

         oos.writeObject(databaseManager.rooms);
         oos.flush();}
}}

服务器:

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

服务器:DBHandler ::

public class Room implements Serializanle {
   private int roomNo;
   private int capacity;
   private String type;
// contructors ...
// getter and setter methods
}

房间类:

ruby bin/webpack

用户应该能够按下按钮(onViewRooms),服务器将被警告&#39;发送回db中的内容。 任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

您的服务器向流发送一个列表:

oos.writeObject(databaseManager.rooms);

但是当您收到列表时,您会尝试将其转换为Room

Room roomer = (Room) ois.readObject();

由于ArrayList不是Room,因此显然会因类强制转换异常而失败。

直接投射到列表:

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