Ako fetch kompletné údaje z databázy tabuľka prostredníctvom RMI pomocou poľa metódou?

0

Otázka

Chcem, aby priniesla úplné údaje z databázy tabuľka prostredníctvom RMI. Použil som rad metóda v rozhraní Java a implementovali sme, že metóda implementácie v triede. Mojím zámerom je, aby údaje v poli, cez implementáciu a ukázať, že cez JTable na strane klienta. Vytvoril som jeden stĺpec tabuľky v databáze. Musím si to celé údaje z tabuľky na strane klienta.

Mám pripojený kódovanie, že som to urobil. Som poznamenal, chyby v sekcii kódu, ktorý som dostal.

rozhranie

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

Realizácia

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

Najlepšiu odpoveď

0

Abstraktné metódy v remote rozhrania nemôže byť statické, takže budete musieť zmeniť definíciu rozhrania na nasledovné.

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

Hodnoty vrátené pomocou diaľkového metódy musí byť serializable. Polia v jave sa serializable, avšak polia majú pevnú veľkosť a pretože ste sa vracia výsledok databáze dopytu nemôžete vedieť, veľkosť. Preto navrhujem, že metóda getArray vrátiť ArrayList alebo lepšie povedané, CachedRowSet.

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

Od triedy TheImplementation je vašou RMI server class, to je asi lepšie denník výnimky, skôr než zobraziť JOptionPane a vždy by ste sa mali prihlásiť trasovanie zásobníka. Upozorňujeme, že vzdialených metód, musí vyhlásiť, že sa hodiť RemoteException s cieľom informovať RMI klienta vzdialenej metóda zlyhala. Preto na rozdiel od ťažby výnimkou, metóda getArray môžete tiež hodiť RemoteException.

Nasledujúci kód ukazuje.

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šimnite si, že nad kódu tiež používa try-s-zdrojov, aby sa zabezpečilo, že ResultSet, Statement a Connection sú všetky zatvorené.

2021-11-24 08:26:23

V iných jazykoch

Táto stránka je v iných jazykoch

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