Comment extraire les données complètes à partir de la base de données de la table à travers RMI à l'aide de la méthode de la baie?

0

La question

Je veux extraire les données complètes de la base de données de la table à travers RMI. J'ai utilisé la méthode de la baie dans l'interface Java et j'ai mis en œuvre cette méthode dans la classe d'implémentation. Mon intention est de prendre les données dans le tableau via la mise en œuvre et de l'afficher via JTable sur le côté client. J'ai créé une table d'une colonne dans la base de données. J'ai pour obtenir que l'ensemble des données de la table sur le côté client.

J'ai joint le codage que j'ai fait. J'ai commenté les erreurs dans la section de code que j'ai reçu.

interface

public interface Interface extends Remote {
     public static String[] getArray() throws Remote Exception; // Here it shows missing method 
                                                               //  body or declare abstract
}

La mise en œuvre

public class TheImplementation extends UnicastRemoteObject implements Interface{
    
    public TheImplementation()throws Remote Exception{
        super();
    }
    
    private static final long serialVersionUID = -3763231206310559L;
    
    Connection con;
    PreparedStatement pst;
    ResultSet rst;

    public static String[] getArray() throws RemoteException{
        String fruitdetails = null; 
        try {
            Connection connection=ConnectionProvider.getConnection();
            Statement st=connection.createStatement();
            ResultSet rs=st.executeQuery("select *from details");
            while(rs.next()) { 
                fruitdetails= rs.getString("fruit");
                String tbData[]={fruitdetails};
            }
        }
        catch (SQLException e) {
            JOptionPane.showMessageDialog(null, e);
        }
        return tbData;// Here it shows error. Cannot find symbol.
                           // I tried to declare array at top. But, It didn't work.
    }
}
java rmi
2021-11-24 05:53:25
1

La meilleure réponse

0

Méthodes abstraites dans l' interface de commande à distance ne peut pas être statique, de sorte que vous besoin de changer la définition de l'interface à la suivante.

public interface Interface extends java.rmi.Remote {
    public String[] getArray() throws RemoteException;
}

Valeurs renvoyées par les méthodes à distance doit être sérialisable. Les tableaux en java sont sérialisables, cependant tableaux ont une taille fixe et puisque vous êtes de retour à la suite d'une requête de base de données vous ne pouvez pas savoir la taille. Donc je suggère que la méthode getArray de retour d'une liste de tableaux ou mieux encore, un CachedRowSet.

public interface Interface extends Remote {
    public CachedRowSet getArray() throws RemoteException;
}

Depuis la classe TheImplementation est votre RMI classe de serveur, il est probablement préférable de connecter des exceptions plutôt que d'afficher un JOptionPane et vous devriez toujours vous connecter la trace de la pile. Notez que les méthodes à distance doivent déclarer qu'ils jettent RemoteException afin d'informer le RMI client que la méthode distante a échoué. Donc en dehors de l'enregistrement de l'exception, la méthode getArray pouvez également jeter un RemoteException.

Le code suivant montre.

import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.sql.rowset.CachedRowSet;
import javax.sql.rowset.RowSetFactory;
import javax.sql.rowset.RowSetProvider;

public class TheImplementation extends UnicastRemoteObject implements Interface {

    public TheImplementation() throws RemoteException {
        super();
    }

    private static final long serialVersionUID = -3763231206310559L;

    public CachedRowSet getArray() throws RemoteException {
        try (Connection con = ConnectionProvider.getConnection();
             Statement st = con.createStatement();
             ResultSet rs = st.executeQuery("select * from details")) {
            RowSetFactory factory = RowSetProvider.newFactory();
            CachedRowSet fruitDetails = factory.createCachedRowSet();
            fruitDetails.populate(rs);
            return fruitDetails;
        }
        catch (SQLException e) {
            throw new RemoteException("Method 'getArray()' failed.", e);
        }
    }
}

Notez que le code ci-dessus utilise également essayer-avec-des ressources pour s'assurer que le ResultSet, Statement et Connection sont tous fermés.

2021-11-24 08:26:23

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................