Jak načíst kompletní data z databáze tabulky prostřednictvím RMI pomocí pole metoda?

0

Otázka

Chci, aby přinesla úplné údaje z databáze tabulky prostřednictvím RMI. Použil jsem metodu pole v Java rozhraní a jsem implementoval tuto metodu v implementaci třídy. Můj záměr je, aby se údaje v poli prostřednictvím provádění a ukázat, že přes JTable na straně klienta. Vytvořil jsem jeden sloupec tabulky v databázi. Musím se dostat, že celý údajů z tabulky na straně klienta.

Mám připojené kódování, které jsem udělal. Mám komentoval chyby v části kódu, které jsem dostal.

rozhraní

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

Provádění

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

Nejlepší odpověď

0

Abstraktní metody ve vzdálené rozhraní nemůže být statické, takže budete muset změnit definici rozhraní následující.

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

Hodnoty vrácené pomocí dálkového metody musí být serializable. Pole v javě jsou serializable, nicméně pole mají pevnou velikost a od té doby se vrací výsledek dotazu do databáze nelze znát velikost. Proto jsem naznačují, že metoda getArray vrátí ArrayList nebo ještě lépe, CachedRowSet.

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

Od třídy TheImplementation je váš RMI server třída, to je asi lepší se přihlásit výjimky, spíše než zobrazení JOptionPane a vy byste měli vždy protokolu trasování zásobníku. Všimněte si, že vzdálený metody musí prohlásit, že se jim hodit RemoteException s cílem informovat RMI client že vzdálený metoda selhala. Proto na rozdíl od protokolování výjimky, metoda getArray může také hodit RemoteException.

Následující kód demonstruje.

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

Všimněte si, že výše uvedený kód používá také try-s-prostředky , aby zajistily, že ResultSet, Statement a Connection jsou všechny zavřené.

2021-11-24 08:26:23

V jiných jazycích

Tato stránka je v jiných jazycích

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