【问题标题】:How do I return a resultset object from a remote method?如何从远程方法返回结果集对象?
【发布时间】:2017-06-30 09:15:09
【问题描述】:

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

这里是调用者方法

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 不可序列化。我该如何解决这个问题?

【问题讨论】:

  • 它也不是String。没有多大意义。
  • @EJP return rs 直到我得到解决方案。当方法是 String 类型时,我实际上并没有尝试返回对象。
  • 那你在说什么?你的标题说 pass ResultSet to 一个远程方法,你的问题说 return it from 一个远程方法,你的代码也不做。
  • @EJP 这是我的错误。将标题更改为“从远程方法返回结果集”。

标签: java jdbc rmi resultset serializable


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 2011-09-05
    • 2016-04-13
    • 1970-01-01
    相关资源
    最近更新 更多