Java 如何从远程方法返回resultset对象?

Java 如何从远程方法返回resultset对象?,java,jdbc,rmi,resultset,serializable,Java,Jdbc,Rmi,Resultset,Serializable,其思想是将查询传递给远程方法,让该远程方法执行查询,并让它将结果集发送回调用方法 下面是调用方方法 btnOK.setOnAction((e)-> { String query = "SELECT * FROM schoolmanagement.director;"; System.out.println("Calling RMI"); try { Registry registry = LocateRegistry.getRegistry("loc

其思想是将查询传递给远程方法,让该远程方法执行查询,并让它将结果集发送回调用方法

下面是调用方方法

btnOK.setOnAction((e)-> {
    String query = "SELECT * FROM schoolmanagement.director;";
    System.out.println("Calling RMI");
    try {
        Registry registry = LocateRegistry.getRegistry("localhost");
        RMIInterface rmi = (RMIInterface)registry.lookup("remoteObject");
        System.out.println(rmi.Query(query));
    } catch (RemoteException e2) {
        e2.printStackTrace();
    } catch (NotBoundException e1) {
        e1.printStackTrace();
    }
});
这里是远程方法

public String Query(String query) throws RemoteException {
    try {
        Connection mycon = DriverManager.getConnection("jdbc:mysql://localhost:3306/schoolmanagement", "root", "root");
        Statement mystatement = mycon.createStatement();
        ResultSet rs = mystatement.executeQuery(query);
        while(rs.next()){
            System.out.println(rs.getString("Name") + " "+ rs.getString("Age"));
        } 
    } catch (SQLException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

}

我知道
rs
是不可序列化的。如何解决此问题?

ResultSet
不可序列化,因为它实际上并不包含所有结果,更准确的做法是将其视为迭代器或指向列表的指针


因此,为了通过RMI发送结果,您必须实际提取结果并将其存储在例如记录列表(或您案例中的控制器对象列表)中。确保这些对象都是可序列化的。

它也不是
字符串。没有多大意义。@EJP返回rs只是在我得到解决方案之前。当方法是String类型时,我实际上并没有试图返回一个对象。那么你在说什么呢?您的标题是将
ResultSet
传递给远程方法,您的问题是从远程方法返回,而您的代码也没有这样做。@EJP这是我的错误。我将把标题改为“从远程方法返回结果集”。