Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    63

    JTable ... mezza vittoria

    ciao la mia storia infinita con le tabelle continua, comunque ho fatto una mezza vittoria ora riesco a visualizzare le intestazioni delle colonne ma non i dati, quindi se riesco a visualizzare le intestazioni la connessione c'è, il problema quindi dovrebbe essere in " Object getValueAt " potete aiutarmi vi posto la connessione e l'object valueact

    saluti batman

    // questa è la connessione

    class ModTab extends AbstractTableModel{
    private Connection connMT;
    private Statement stmtMT;
    private ResultSet rsltMT;
    private ResultSetMetaData rsmdMT;

    public ModTab() throws SQLException{

    super();
    try {
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newI nstance();
    connMT=DriverManager.getConnection("jdbcdbc:;Driver={Microsoft Access Driver (*.mdb)};DBQ=db1.mdb");
    stmtMT=connMT.createStatement();
    rsltMT= stmtMT.executeQuery("SELECT * FROM archivio;");
    rsmdMT= rsltMT.getMetaData();

    } // fine try
    catch (ClassNotFoundException ex) {
    ex.printStackTrace();
    } catch (InstantiationException ex) {
    ex.printStackTrace();
    } catch (IllegalAccessException ex) {
    ex.printStackTrace();
    } // fine catch


    } // fine costruttore


    // fine connessione



    // inizio Object GetValueAct

    public Object getValueAt(int rowIndex, int columnIndex) {

    try {

    ResultSet rs = getResultSet();
    rs.absolute(rowIndex + 1);
    return rs.getObject(columnIndex + 1);

    }// fine try
    catch(SQLException e)
    { System.out.println("Error " + e);
    return null;
    }
    } // fine Object getValueAct

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Ti da qualche eccezione strana? Cmq secondo me non e' un idea brillante usare il ResulSet come struttura dati per memorizzare il contenuto delle celle della tabella perche' lavora direttamente sul database (nel senso che non e' che fai la query e tu hai i dati, ma invii la query, i risultati rimangono nella memoria del db e l'oggetto ResulSet non fa altro che comunicare con quest'ultimo) e se il ResulSet viene chiuso perdi tutti i dati.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    63

    jTable ... mezza vittoria

    non mi da nessuna eccezione , vedo solo le intestazioni delle colonne, ma non vedo i dati,
    al posto del ResultSet cosa useresti.

    saluti batman

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Mapperei i risultati del ResultSet su una qualsiasi struttura dati. Cmq il tuo problema non e' questo. Hai implementato correttamente tutti i metodi di AbstractTableModel? Il resultset restituisce risultati?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    63
    ciao ti mostro lo script relativa alla tabella e come viene visualizzata, una cosa come posso vedere se nel ResultSet c'è qualcosa.

    saluti batman

    questo è loscript relativa alla tabella

    class ModTab extends AbstractTableModel{
    private Connection connMT;
    private Statement stmtMT;
    private ResultSet rsltMT;
    private ResultSetMetaData rsmdMT;
    public ModTab() throws SQLException{

    super();
    try {

    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newI nstance();
    connMT=DriverManager.getConnection("jdbcdbc:;Driver={Microsoft Access Driver (*.mdb)};DBQ=db1.mdb");
    stmtMT=connMT.createStatement();
    rsltMT= stmtMT.executeQuery("SELECT * FROM archivio;");
    rsmdMT= rsltMT.getMetaData();

    } // fine try
    catch (ClassNotFoundException ex) {
    ex.printStackTrace();
    } catch (InstantiationException ex) {
    ex.printStackTrace();
    } catch (IllegalAccessException ex) {
    ex.printStackTrace();
    } // fine catch


    } // fine costruttore

    public int getRowCount(){
    try {
    return rsltMT.getRow();
    }
    catch(SQLException e)
    { System.out.println("Error " + e);
    return 0; }
    }// ritorna il numero delle celle

    public int getColumnCount(){
    try {
    return rsmdMT.getColumnCount() ;
    }
    catch(SQLException e)
    { System.out.println("Error " + e);
    return 0; }
    }// ritorna il numero delle colonne

    public String getColumnName(int c) {
    try {

    return rsmdMT.getColumnName(c + 1);
    }
    catch(Exception e)
    { System.out.println("Error " + e);
    return " "; }
    }// ritorna il nome delle colonne

    public ResultSet getResultSet()
    { return rsltMT;}


    public Object getValueAt(int rowIndex, int columnIndex) {

    try {

    ResultSet rs = getResultSet();
    rs.absolute(rowIndex + 1);
    return rs.getObject(columnIndex + 1);

    }// fine try
    catch(SQLException e)
    { System.out.println("Error " + e);
    return null;
    }
    } // fine Object getValueAct

    } // fine class Modtab



    la tabella viene visualizzata così


    public void leggitabella(ActionEvent e) throws SQLException{
    // costruzione nuova finestra
    JDialog finestra2 = new JDialog();
    JTextArea lavagna2 = new JTextArea();
    Font f2 = new Font(null, Font.BOLD,15);
    miomodello = new ModTab();
    t = new JTable(miomodello);
    finestra2.add(t);
    finestra2.setFont(f2);
    finestra2.setTitle("visualizzazione dati in tabella");
    finestra2.setSize(600,400);
    finestra2.setLocation(300,200);
    finestra2.setVisible(true);
    finestra2.setLayout(new BorderLayout());
    finestra2.add(BorderLayout.CENTER,new JScrollPane(t));
    finestra2.setDefaultCloseOperation(JDialog.DISPOSE _ON_CLOSE);

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    La prossima volta metti il codice all'interno dei tag [*code] [*/code] (senza *) cosi' si capisce meglio.
    Cmq l'errore sta in
    codice:
    public int getRowCount(){
       try {
          return rsltMT.getRow();
       }catch(SQLException e){ 
          System.out.println("Error " + e);
          return 0; 
       }
    }
    Il metodo getRow di resultSet non restituisce il numero di righe, ma l'indice della riga corrente. Questo appunto perche' resultSet non conosce il numero dei record che stanno sul database.
    Ora il getRowCount viene chiamato in fase di costruzione della tabella e il resultSet e' ancora sul indice 0, quindi la colonna vede 0 righe e non ne disegna nemmeno una.
    Devi fare resultSet.last() (che fa scorrere il resultset del db all'ultima riga) e poi chiedere l'indice di riga con il getRow.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    63

    ResulSet.last()

    ciao ho cercato sui manuali che ho( nessun esempio) ed anche in internet, ma gli esempi o come si usa non sono chiari, avresti un esempio da mostrarmi.

    saluti batman

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Esempio di cosa? Il metodo last sposta il cursore all'ultima posizione, a quel punto se chiami row ottieni il numero di righe effettive del resultset (che e' uguale appunto all'indice di riga dell'ultimo record trovato).
    Probabilmente ti ha confuso il fatto che abbia scritto resulSet al posto di rsltMT (ma la minuscola iniziale stava proprio ad indicare che intendevo la variabile e non la classe).
    In ogni caso la documentazione ufficiale avrebbe chiarito ogni dubbio sulla non staticita' del metodo. http://java.sun.com/javase/6/docs/ap...roperties.html
    codice:
    public int getRowCount(){
       try {
          rsltMT.last();
          return rsltMT.getRow();
       }catch(SQLException e){ 
          System.out.println("Error " + e);
          return 0; 
       }
    }

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    63

    JTable

    GRAZIEEEEEEEEE simo

    saluti batman

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    63

    resultset.last()

    ciao ho cantato vittoria troppo presto, mi da questo tipo di errore:
    java.sql.SQLException: Result set type is TYPE_FORWARD_ONLY

    mi par di capire che devo cambiare tipo di cursore, puoi aiutarmi

    saluti batman

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.