Cum de a aduce completați datele din baza de date de masă prin RMI folosind metoda matrice?

0

Problema

Vreau să-i aducă completați datele din baza de date de masă prin RMI. Am folosit metoda matrice în Java interface și am pus în aplicare metoda din clasa de punere în aplicare. Intenția mea este de a lua date din matrice prin implementarea și arătați-o prin JTable pe partea de client. Am creat-o coloană de tabel în baza de date. Trebuie să iau toate datele din acest tabel pentru partea de client.

Am atașat de codificare pe care am făcut-o. Am comentat erori în secțiunea de cod pe care am primit.

interfață

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

Punerea în aplicare

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

Cel mai bun răspuns

0

Metode abstracte în interfețe la distanță nu poate fi static, astfel încât aveți nevoie pentru a schimba interfața definiție la următorul.

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

Valorile returnate de la distanță metode trebuie să fie serializabile. Tablouri în java sunt serializabile, cu toate acestea tablouri au o dimensiune fixă și când te întorci rezultatul de o interogare a bazei de date nu stiu dimensiunea. Prin urmare, am sugera că metoda getArray reveni un ArrayList sau mai bine încă, o CachedRowSet.

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

Din clasa TheImplementation este RMI server de clasă, este, probabil, mai bine pentru a vă conecta excepții, mai degrabă decât a afișa o JOptionPane și tu ar trebui să întotdeauna jurnal stivei. Rețineți că de la distanță metode trebuie să declare pe care le arunca RemoteException în scopul de a informa RMI client că metoda de la distanță nu a reușit. Prin urmare, în afară de logare excepție, metoda getArray puteți arunca, de asemenea, un RemoteException.

Codul de mai jos demonstrează.

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

Rețineți că codul de mai sus utilizează, de asemenea, încercați-cu-resurse pentru a se asigura că ResultSet, Statement și Connection sunt toate închise.

2021-11-24 08:26:23

În alte limbi

Această pagină este în alte limbi

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