来自服务器;SQL,arrayList |到客户端;桌面视图
我正在尝试使用JavaFXTableView查看SQL数据库表 我在服务器上有一个DBHandler类,它有一个从表中选择所有项的方法,然后我将这些值存储在resultSet中。然后,我使用while循环将resultSet的内容添加到object class Room的arrayList中。然后通过套接字将arrayList发送到客户端 客户机将该对象作为Room类的实例读取,然后将该对象添加到另一个arrayList,该arrayList添加到observableList,observableList用于将数据添加到表视图 但是,代码/逻辑不起作用。在客户端,我得到一个“java.lang.ClassCastException:java.util.ArrayList不能转换到文件室”错误 客户端:FXMLController::来自服务器;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
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();
}
}