Newsgroup: it.comp.java
Titolo: Dove sbaglio?

Ciao a tutti,
sto scrivendo un codice che recupera dei dati da un DB mysql e li deve
importare in una JTable.
Come da teoria definisco un  appropriato TableModel usando la classe
AbstractTableModel.
Tutto bene, i dati vengono estratti dal DB e il nuovo TableModel scrive le
intestazione di campi, calcola le dimensioni della JTable correttamente, ma
non capisco perché non riesce a "scrivere" in valori delle singole celle
(valorizzare i campi per ciascun record).
Spero che qualcuno possa illumunarmi, dopo tanti tentativo non riusciti, di
seguito allego il codice.
import java.awt.*;
import javax.swing.*;
import java.sql.*;
import java.sql.SQLException;
import javax.swing.table.AbstractTableModel;
//import javax.swing.table.DefaultTableModel;
public class GestionePrenotazioni extends JFrame{
    private JTabbedPane tabbedPane;
    private JTable jTable;
    private GenericTableModel tableModel;
    private JScrollPane scrollPane;
    public GestionePrenotazioni(){
        super("Gestione Prenotazioni Caffčlletto");
        setSize(640, 480);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setLayout(new BorderLayout());
        tabbedPane = new JTabbedPane(JTabbedPane.TOP);
        tableModel = new GenericTableModel("SELECT * FROM anagrafica_soci");
       // SimpleConnection.openConnection();
       // SimpleConnection.execute("SELECT * FROM anagrafica_soci");
        jTable = new JTable(tableModel);
        scrollPane = new JScrollPane(jTable);
        tabbedPane.add("Anagrafica Soci", scrollPane);
        tabbedPane.add("Prenotazioni", null);
        tabbedPane.setMaximumSize(new Dimension(300,225));
        System.out.println("Numero records:
"+SimpleConnection.getRecordCount());
        getContentPane().add(BorderLayout.CENTER, tabbedPane);
        setVisible(true);
    }
    public static void main(String argv[]){
        GestionePrenotazioni gP = new GestionePrenotazioni();
    }
}
    class SimpleConnection{
        private static Connection cn;
        private static Statement stmt;
        public static ResultSet rs;
        public static void openConnection(){
             try {
              Class.forName("com.mysql.jdbc.Driver");
            } catch (ClassNotFoundException e) {
              System.out.println ("Mysql device driver does not exist");
              System.exit(1);
            }
             try{
            cn = DriverManager.getConnection
("jdbc:mysql://localhost/bbbv?user=gano&password=");
            stmt = cn.createStatement();
             } catch(SQLException s){
                System.out.println("Errore livello url!");
             }
    // Create a Statement
        }
        public static void closeConnection(){
            stmt = null;
            try{
            cn.close();
            } catch(SQLException s){
                System.out.println("Errore chiusura connessione");
            }
        }
        public static ResultSet execute(String anSQLString){
            openConnection();
            try{
            rs = stmt.executeQuery(anSQLString);
            } catch(SQLException s){
                System.out.println("Errore nella QUERY");
            }
           return rs;
        }
       public static int getRecordCount(){
           int numRec = 0;
           try{
                rs.first();
                numRec +=1;
                while(rs.next()){
                    numRec +=1;
                }
           } catch(SQLException s){
                System.out.println("Errore nel conteggio");
           }
           return numRec;
       }
       public static String[] getColumnsName(){
            String[] columnsName = null;
            int columnsNumber =0;
            ResultSetMetaData rsmd = null;
            try{
                rsmd = rs.getMetaData();
                columnsNumber = rsmd.getColumnCount();
            } catch(SQLException s) {System.out.println("Errore nella
getColumnsName()");}
            columnsName = new String[columnsNumber];
            for(int i=0; i<columnsNumber;i++){
                try{
                    columnsName[i] = rsmd.getColumnName(i+1);
                }
                catch(SQLException s){
                    System.out.println("Errore nella creazione dell'array");
                }
            }
            return columnsName;
       }
    }
    class GenericTableModel extends AbstractTableModel{
        private String[] columnsName;
        private String[][] cells;
        private ResultSet rst;
        public GenericTableModel(String SQLQuery){
            int rowCount=0;
            String query = SQLQuery;
            System.out.println(query);
            //Recupero il numero di Record restituiti dalla query
           SimpleConnection.execute(SQLQuery);
            rowCount = SimpleConnection.getRecordCount();
            //Recupero le intestazioni delle colonne
            columnsName = SimpleConnection.getColumnsName();
            cells = new String[rowCount][columnsName.length];
            int counter = 0;
            try{
                while(SimpleConnection.rs.next()){
                    System.out.println("Sono dentro al while");
                    for(int i=0;i<columnsName.length;i++){
cells[counter][i]=SimpleConnection.rs.getString(i+1);
System.out.println("--"+SimpleConnection.rs.getString(i+1));
                    }
                    counter++;
                }
            }
            catch(SQLException s){
                System.out.println("Errore nel while");
            }
        }
        public int getRowCount(){
            return cells.length;
        }
        public int getColumnCount(){
            return columnsName.length;
        }
        /** Returns the value for the cell at <code>columnIndex</code> and
         * <code>rowIndex</code>.
         *
         * @param rowIndex the row whose value is to be queried
         * @param columnIndex  the column whose value is to be queried
         * @return the value Object at the specified cell
         *
         */
        public Object getValueAt(int rowIndex, int columnIndex) {
            return cells[rowIndex][columnIndex];
        }
        public String getColumnName(int c){
            return columnsName[c];
        }
    }
Il codice (modificando le quesry e le connection) puň essere eseguito da
chiunque.
Chi mi puň aiutare?
Grazie infinite a tutti
Mr. Deckard

Ho scorso rapidamente il codice e mi sembra che tu scorra il resultSet in 
avanti. Se non lo dichiari "SCROLLABLE" non puoi rileggerlo.
Scusa ma ti scrivo di fretta. Comunque controlla il tipo di resultSet.

 Scusa ma ti scrivo di fretta. Comunque controlla il tipo di resultSet.
Ti ringrazio, comunque, adesso controllo!
Mr. Deckard

 Scusa ma ti scrivo di fretta. Comunque controlla il tipo di resultSet.
Sì, hai perfettamente ragione, il problema è proprio quello. Avendolo già
scroso per calcolare il numero di records. while(rs.next()) successivo era
già alla fine!
Grazie ancora!