2017-02-12 61 views
-1

這個想法是將查詢傳遞給遠程方法,讓該遠程方法執行它並讓結果集返回調用方法。如何從遠程方法返回結果集對象?

這裏是主叫方法

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是不可序列。我如何解決這個問題?

+0

它也不是'String'。沒有多大意義。 – EJP

+0

@EJP返回rs直到我得到一個解決方案。我實際上並沒有嘗試在方法類型爲String的情況下返回對象。 – Wagari

+0

那麼你在說什麼?你的標題說'通過'ResultSet' * *遠程方法,你的問題說從遠程方法返回*,你的代碼也不會做。 – EJP

回答

3

ResultSet不是可序列化的,因爲它實際上並不包含所有結果,所以將其視爲迭代器或指向列表的指針更準確。

因此,要通過RMI發送結果,您將不得不實際提取結果並將其存儲在例如記錄列表(或您的案例中的Director對象列表)中。確保這些對象都是可序列化的。