2017-02-12 2 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 в вашем случае). Убедитесь, что все объекты сериализуемы.

Смежные вопросы