我试图使用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中的内容。 任何帮助将不胜感激!
答案 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();
}
}