2017-02-12 21 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 return rsは解決策が得られるまでです。メソッドがString型である間に、私は実際にオブジェクトを返そうとしていません。 – Wagari

+0

何を言っているのですか?あなたのタイトルは、 'ResultSet' *をリモートメソッドに渡すと言っていますが、あなたの質問はリモートメソッドから*返すと言っていますし、あなたのコードはどちらもしません。 – EJP

答えて

3

ResultSetは実際にはすべての結果を含んでいないため、イテレータまたはリストへのポインタと考える方が正確です。

結果をRMIで送信するには、結果を実際に抽出し、たとえばレコードのリスト(またはケースのDirectorオブジェクトのリスト)に格納する必要があります。それらのオブジェクトがすべて直列化可能であることを確認してください。