2017-02-12 1 views
-1

L'idée est de passer une requête à une méthode distante, de la faire exécuter par cette méthode distante et de la laisser renvoyer l'ensemble de résultats à la méthode appelante.Comment renvoyer un objet resultset à partir d'une méthode distante?

Voici la méthode de l'appelant

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(); 
    } 
}); 

Et voici la méthode à distance

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(); 
    } 

} 

Je sais que rs n'est pas sérialisable. Comment est-ce que je travaille autour de ceci?

+0

Ce n'est pas un 'String' non plus. Ne pas avoir beaucoup de sens. – EJP

+0

@EJP return rs est juste jusqu'à ce que j'obtienne une solution. Je ne suis pas en train d'essayer de retourner un objet alors que la méthode est de type String. – Wagari

+0

Alors de quoi parlez-vous? Votre titre dit passer 'ResultSet' * à * une méthode distante, votre question dit le renvoyer * de * une méthode distante, et votre code ne le fait pas non plus. – EJP

Répondre

3

ResultSet n'est pas sérialisable car il ne contient pas réellement tous les résultats, il est plus précis de le considérer comme un itérateur ou un pointeur dans une liste. Pour envoyer les résultats sur RMI, vous devrez extraire les résultats et les stocker dans une liste d'enregistrements (ou une liste d'objets Director dans votre cas). Assurez-vous que ces objets sont tous sérialisables.