Como buscar dados completos do banco de dados da tabela através de RMI utilizando o método de matriz?

0

Pergunta

Eu quero buscar os dados completos do banco de dados da tabela através de RMI. Eu usei o método de matriz na interface Java e tenho a implementação de método na classe de implementação. Minha intenção é levar os dados na matriz através da implementação e mostrar através JTable no lado do cliente. Eu criei uma tabela de uma coluna no banco de dados. Tenho que fazer isso toda dados da tabela ao lado do cliente.

Anexei a codificação que eu fiz. Eu comentou os erros na secção de código que eu tenho.

interface

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

Implementação

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

Melhor resposta

0

Métodos abstratos em interfaces remotas não pode ser estático, por isso, você precisa alterar a definição de interface para o seguinte.

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

Valores retornados pelos métodos remotos deve ser serializável. Arrays em java são serializáveis, no entanto matrizes têm um tamanho fixo e já que você está retornando o resultado de uma consulta de banco de dados, você não sabe o tamanho. Portanto, eu sugiro que o método getArray retornar um ArrayList ou melhor ainda, um CachedRowSet.

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

Desde de classe TheImplementation é a sua RMI de classe de servidor, provavelmente é melhor para log de exceções ao invés de exibir um JOptionPane e você deve sempre faça o rastreamento de pilha. Note que remota de métodos deve declarar que eles jogam RemoteException a fim de informar o cliente RMI que o método remoto falhou. Portanto, além de registrar a exceção, método getArray também pode lançar um RemoteException.

O código a seguir demonstra.

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

Note que o código acima usa também tentar-com-recursos para garantir que o ResultSet, Statement e Connection estão todas fechadas.

2021-11-24 08:26:23

Em outros idiomas

Esta página está em outros idiomas

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