Newsgroup: it.comp.java
Titolo: Problema con connessione database e array

Grazie anticipatamente a chi vorrà rispondermi, in effetti non vedo dove
possa essere il problema:
allego il codice:
L'errore si genera in fase di runtime e non alla compilazione,
Il programma all'inizio scrive "connessione Ok"
poi scrive il primo record regolarmente
poi scrive "connessione fallita"
nel momento in cui dovrebbe mettere nell'array di stringhe il cognome si
genera un errore...
potete aiutarmi a capire quale?
se tolgo l'array di stringhe invece tutto bene.
grazie 1000
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.table.*;
import java.sql.*;
class MyConnection {
   String cognome [];
   String nome [];
  public  MyConnection(){
    try {
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
       String url = "jdbc:odbc:Driver={Microsoft Access Driver
(*.mdb)};DBQ=C:\\Desktop\\tabella\\db1.mdb";
       Connection con = DriverManager.getConnection(url);
       System.out.println("Connessione OK");
       Statement st = con.createStatement();
       ResultSet rs = st.executeQuery("select * from ANAG");
       while (rs.next()) {
         int x=0;
         System.out.println(rs.getString("Cognome") + " " +
rs.getString("Nome"));
      *********************
       qui si manifesta il problema:
     **********************
         cognome[x]=rs.getString("Cognome");
         nome[x]=rs.getString("Nome");
         x++;
      }
    }
    catch (Exception e) {
      System.out.println("Connessione Fallita");
    }
  }
  public static void main (String argv[]){
    MyConnection c = new MyConnection();
  }
}

          nome[x]=rs.getString("Nome");
Non puoi tornare indietro!
Se leggi la documentazione di java.sql.ResultSet trovi:
'For maximum portability, result set columns within each row should be
read in left-to-right order, and each column should be read only once.'
Soluzione - inverti le operazioni:
-carica l'array
-passa alle System.out.println l'elemento dell'array che vuoi stampare
Non è attinente al problema, ma ti sconsiglio di scrivere 'select *...'
elenca invece tutti i campi 'SELECT Cognome, Nome, ...FROM...'. Questo ti
semplifica il debug quando hai a che fare molti campi.
Inoltre io preferisco usare le getXXX(int i).
cito di nuovo la documentazione
'In general, using the column index will be more efficient.'
Inviato da 
www.mynewsgate.net

"gnazio" <8...@mynewsgate.ned.invalid> ha scritto nel messaggio
news:20040115...@mynewsgate.net...


Grazie per l'attenzione, ma proprio non riesco a sbloccare questo problema.
Il punto è che il problema si verifica anche se io commento l'istruzione
println, se la tolgo del tutto e lascio quella dell'array solamente.
Ovviamente se la sposto e gli passo l'array il problema rimane.
Ho fatto un sacco di prove e francamente...
cosa può essere sfuggito?
"gnazio" <8...@mynewsgate.ned.invalid> ha scritto nel messaggio
news:20040115...@mynewsgate.net...



non hai inizializzato gli array cognome[] e nome[] e dunque l'errore che ti
da dovrebbe essere una NullPointerException.
Ciao.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 > cosa puň essere sfuggito?



Secondo me la cosa migliore in questi casi è non usare un array ma un'altra
struttura che si possa facilmente ridimensionare, come ad esempio un
java.util.Vector.
Se invece sei obbligato a usare un array, potresti fare, prima della tua,
un'altra query del tipo "select count(*) from ANAG" e ricavare la dimensione
del ResultSet.
Questa soluzione non è un granché e ovviamente funzione solo se tra le due
richieste al database nessuno scrive o cancella delle righe da quella
tabella.


 ha scritto nel messaggio
news:193Z207Z168Z153Y...@usenet.libero.it...
