Jak przesłać w RMI dane tabeli od serwera do klienta

0

Witam serdecznie, mam aplikację RMI: po stronie klienta mam okno z tabelą JTable...Chciałbym ją wypełnić danymi z bazy danych, a dostęp do bazy ma serwer...Próbowałem już przesłać od serwera do klienta obiekt typu CachedRowSet, ResultSet - nie działa...próbowałem pzresłać cały obiekt typu DefaultTableModel do klienta z serwera- działa, ale bez "isCellEditable" - jeśli serwer tworzy obiekt defaultTableModel z "isCelleditable" - wtedy u klienta gdy kliknę na komorke- wywala blad...

org.firebirdsql.jdbc.FBSQLException
        at org.firebirdsql.jdbc.AbstractConnection.createStatement(AbstractConnection.java:771)
        at org.firebirdsql.jdbc.AbstractConnection.createStatement(AbstractConnection.java:254)
        at Connection.Pobranie_tabel.Pobierz_model(Pobranie_tabel.java:41)
        at Classes.SerwerImpl.Pobierz_model(SerwerImpl.java:153)...itd

A po stronie serwera kod tworzenia DefaultTableModel wygląda tak:

public class Pobranie_tabel implements Serializable
{
    private JComboBox combo_sortowanie;
    private String selectedItem;
    Interfejs RMI;


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



    static String relacja;

    public DefaultTableModel Pobierz_model(String zapytanie, String tableName) throws SQLException, RemoteException
    {

        String query=zapytanie;
        relacja=new String(tableName);
        ResultSet rs=null;
        DefaultTableModel tModel=null;


        try
        {
            rs = Polaczenie.conn.createStatement().executeQuery(query);
            ResultSetMetaData rsmd = rs.getMetaData();
            int colCount = rsmd.getColumnCount();
            System.out.println(colCount);

            String[] colHeaders = new String[colCount];
            tModel = new DefaultTableModel()
            {
                @Override
                public boolean isCellEditable(int rowIndex, int columnIndex)
                {    
                    return false;
                }
            };
            
            
               
            for(int i=0;i<colCount;i++)
            {
                colHeaders[i] = rsmd.getColumnName(i+1);
            }

            tModel.setColumnIdentifiers(colHeaders);

            while(rs.next())
            {
                Object[] obj = new Object[colCount];
                for(int i=0;i<colCount;i++)
                {
                    obj[i] = rs.getObject(i+1);
                }

                tModel.addRow(obj);

            }
            Polaczenie.conn.close();


        }
        catch(Exception ex)
        {
            JOptionPane.showMessageDialog(null,"Nie mozna pobrac danych z bazy: "+ex.getMessage(),"ERROR", JOptionPane.ERROR_MESSAGE);
        }
        return tModel;


    }
  }

A ktoś wie jak przesłać z serwera do klienta obiekt podobnego typu co ResultSet, CachedRowSet z danymi tabeli odnośnie bazy danych? Chodzi mi o to, żeby klient dostał taki obiekt i wtedy po jego stronie można by wyciągać z takiego obiektu wszelkie potrzebne dane bazodanowe (juz tak w trybie "offline"-bez podlaczania do bazy")...Dziekuje i pozdrawiam

0

zrób sobie metodę która będzie to zwracać po stronie serwera i odwołaj się w kliencie dzięki rmi do tej metody. mi tak zadziałało na przesyłaniu ArrayList.

0
Gierappa2 napisał(a)

zrób sobie metodę która będzie to zwracać po stronie serwera i odwołaj się w kliencie dzięki rmi do tej metody. mi tak zadziałało na przesyłaniu ArrayList.

No tak, z tym mozna sobie poradzic...NIe wiem dalej jak przeslac poprawnie model tbeli - obiekt typu defaultTableModel z zaznaczeniem, ktore komorki maja byc edytowalne a ktore nie...Wywala mi blad...Tym razem: GDS Exception: No transaction for request...

1 użytkowników online, w tym zalogowanych: 0, gości: 1