Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [JAVA] Jtable e database

    Salve ragazzi..
    Sto cercando di estrarre dei dati da un database e di inserirli in una jtable ma mi lancia un' eccezione ora vi posto il codice e l'errore.
    codice:
    ...................................................................
        int righe=0;
        Object[][] value=new Object[righe][2];
        String[] columnNames={"nome","cognome"};
    ...................................................................
      
     public void connetti(){
        
         int id=0;
         int i=0;
            try {
              Statement st = connection.createStatement();
              String query = "SELECT * FROM archivio";
              ResultSet rs = st.executeQuery(query);
              while(rs.next()){
                    value[i][0]=rs.getString("nome");
                    value[i][1]=rs.getString("cognome");
                      
                       i++;
                     }
    
            }catch(SQLException je){}
       }
    ...................................................................
    
    JTable tabella = new JTable(value,columnNames);
    Ora quando vado a compilare la classe non mi da nessn errore ma quando lancio il metodo mi tira fuori un ArrayIndexOutOfBoundsException : 0
    proprio sulla linea "value[i][0]=rs.getString("nome");" mi date un aiutino grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Stai dichiarando value come Object[0][2]...
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3

    [JAVA] JTable

    Ciao e grazie di avermi risposto ora ti posto la classe
    puoi spiegarti meglio dove sbaglio grazie


    codice:
    public class Frame extends JFrame {
     static ResultSet rs2;
      int righe=0;
      int c=0;
        Object[][] value=new Object[righe][2];
        String[] columnNames={"nome","cognome"};
    
      public Frame() {
        
        
        
        
        getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER);
          jScrollPane1.getViewport().add(jTable1);
          setDefaultCloseOperation(EXIT_ON_CLOSE);
          setTitle("Rirsultati Tabella");
          pack();
          setVisible(true);
          connetti();
          ritorna();
      }
    
      public static void main(String[] args) {
        Frame frame = new Frame();
      }
    
      JScrollPane jScrollPane1 = new JScrollPane();
      JTable jTable1 = new JTable(value,columnNames);
    
       public void connetti(){
         Connection connection = null;
         String codice="";
         int id=0;
         int i=0;
           try {
            String databaseURI = "jdbc:mysql://localhost:3306/archivio";
            String userName = "root";
            String password = "";
            Driver driver = new org.gjt.mm.mysql.Driver();
            DriverManager.registerDriver(driver);
            connection = DriverManager.getConnection(databaseURI, userName,
                                                     password);
            if (!connection.isClosed())
              System.out.println("Connesso!");
            } catch(Exception  e) {
            System.err.println("Exception: " + e.getMessage());
            }
            try {
              Statement st = connection.createStatement();
              String query = "SELECT * FROM tabella";
              ResultSet rs = st.executeQuery(query);
              while(rs.next()){
                       value[i][0]=rs.getString("nome");
                       value[i][1]=rs.getString("cognome");
                       i++;
                     }
          
                              
    
            }catch(SQLException je){}  
    
       }
    
    
       public void ritorna(){
        Connection connection = null;
               try {
                   Statement st = connection.createStatement();
                   String query = "SELECT * FROM tabella";
                   ResultSet rs = st.executeQuery(query);
       
                   rs2=st.executeQuery("SELECT COUNT (*) as c FROM tabella");
                   rs2.next();
                   righe=rs2.getInt("c");
       
       
                 }catch(SQLException ve){}
       
       
       }
    
    }

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Quando tu inizializzi il vettore value

    codice:
    int righe=0;
    Object[][] value=new Object[righe][2];
    Ossia value = Object[0][2]

    Poi quando vai a metterci dentro i risultati della query, java suppone che value sia almeno [1][2] ed è per questo che ti si solleva l'eccezione ArrayOutOfBound. Perché inizializzi value in quel modo?

    Ti conviene inzializzare value alla lunghezza del recordset restituito dalla query (cerca sul forum, se n'è parlato almeno un paio di volte nella scorsa settimana), e solo allora caricarlo con i dati estratti dal database.

    Ossia, sposta l'inizializzazione dopo
    codice:
    try {
              Statement st = connection.createStatement();
              String query = "SELECT * FROM tabella";
              ResultSet rs = st.executeQuery(query);
              //fai qualcosa per determinare il numero di righe estratte:
              // quindi inizializza con
              value = Object[righe_estratte][2]
    e poi prosegui normalmente con il ciclo while
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5

    [JAVA] JTable

    Andrea credo di aver fatto cosa mi avevi suggerito

    codice:
    int righe;
     int c;
     Object[][] value;
     .........
      try {
              Statement st = connection.createStatement();
              String query = "SELECT * FROM tabella";
              ResultSet rs = st.executeQuery(query);
              value = new Object[righe][2];
              while(rs.next()){
                       value[i][0]=rs.getString("nome");
                       value[i][1]=rs.getString("cognome");
                       i++;
                      }                          
            }catch(SQLException je){}  
    
            try {
                  Statement st = connection.createStatement();
                  rs2=st.executeQuery("SELECT COUNT (*) as c FROM tabella");
                  rs2.next();
                  righe=rs2.getInt("c");
                 
                 }catch(SQLException ve){}
    Ma mi restituisce un errore quando lancio la classe

    java.lang.NullPointerException
    .....


  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Si, ma ti stai perdendo in un bicchier d'acqua:

    potresti provare con

    codice:
    try {
              Statement st = connection.createStatement();
              String query = "SELECT * FROM tabella";
              ResultSet rs = st.executeQuery(query);
              righe = rs.last().getRow();
              rs.beforeFirst(); 
              value = new Object[righe][2];
              while(rs.next()){
                       value[i][0]=rs.getString("nome");
                       value[i][1]=rs.getString("cognome");
                       i++;
                      }                          
            }catch(SQLException je){}
    Occhio che però certi recordset con certi database sono scorsi solo una volta, in avanti, per cui potresti ottenere un'eccezione in fase di esecuzione.

    Alternativamente, potresti creare un Vector ed aggiungere al Vector una riga del recordset alla volta. Alla fine per sapere quante righe hai estratto usi il metodo size() di Vector.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

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 © 2024 vBulletin Solutions, Inc. All rights reserved.