PDA

Visualizza la versione completa : [Java] Tabelle SQL --> Tabella Java


focaska
01-07-2005, 17:56
Avrei bisogno di una mano riguardo alla creazione di una tabella.

Ho un programma gestionale in java che utilizza anche un database sql.

In pratica, l'accesso e l'inserimento dei dati nel Database non da problemi, invece quando devo andare a stampare la tabella del DB in output mi da errore in esecuzione.

brevemente ecco cosa ho fatto ma non funziona:
accesso al DB, la tabella viene copiata riga per riga su una array di stringhe, questo poi viene spezzettato in oggni componente (il problema dovrebbe essere qui, almeno credo) e memorizzato in un array/matrice, per poi seguire una procedura di stampa in output con creazione grafica della tabellina.

L'errore che mi da in esecuzione.

Che potrei fare? La funziona l'ho rigirata in mille modi ma da sempre errore in esecuzione...

Sapete un metodo alternativo per stampare una tabella sql in java?

Grazie in anticipo

LeleFT
01-07-2005, 18:05
Non ci hai dato alcun elemento essenziale per poterti essere d'aiuto:

1) Che errore ti d in esecuzione?
2) Un po' di codice per capire dove sta l'errore


Ciao. :ciauz:

focaska
01-07-2005, 18:50
Questa qui la procedura che non funziona, che da problemi in esecuzione...vedrete una variabile Risul1 non presente perch globale...


public void VisualizzaVolo() {
String NumeroVolo = NumVoloVT.getText();
if (NumeroVolo.equals("")) new errCampiVuoti(this,false).show();

int riga = 0;
String[] nomiColonne = {"Numero Volo", "Arrivo", "Ora Partenza", "Giorno", "Mese"};
Object[][] dati;
String url = "jdbc:mysql://localhost/Aereoporto?user=root";
String query2 = "SELECT * FROM Volo WHERE NumVolo= '"+ NumeroVolo + "'";
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
} catch(Exception e){System.out.println("Errore Driver");}
try {
Connection con = DriverManager.getConnection(url,"root","");
Statement stm = con.createStatement();
ResultSet rs = stm.executeQuery(query2);
ResultSetMetaData rsmd = rs.getMetaData();
int numColonne = rsmd.getColumnCount();
rs.last();
int numRighe = rs.getRow();
rs.first();
Risul1 = new String[numRighe];
boolean prossimo = rs.first();
while(prossimo) {
Risul1[riga] = new String(rs.getString(1) + " - " + rs.getString(2) + " " + rs.getString(3) + " - " + rs.getString(4)+ " - " + rs.getString(5));
riga++;
prossimo = rs.next();
}
rs.close();
stm.close();
con.close();
} catch(SQLException e) {System.out.println("Errore Database");}

String[] datiTemp = Risul1;
int numColonne1 = nomiColonne.length;
int numRighe1 = datiTemp.length / numColonne1;
int i;
dati = new Object[numRighe1][numColonne1];
for (i=0; i<datiTemp.length; i++) {
dati[i/numColonne1][i%numColonne1] = datiTemp[i];
}

TabVis = new javax.swing.JTable(dati, nomiColonne);
for (int z=0;z<nomiColonne.length;z++) {
javax.swing.table.TableColumn Colonna = null;
Colonna = TabVis.getColumnModel().getColumn(z);
if (z==0) Colonna.setPreferredWidth(50);
else if (z==3) Colonna.setPreferredWidth(100);
else if (z==4) Colonna.setPreferredWidth(150);
else if (z==6) Colonna.setPreferredWidth(30);
else if (z==7) Colonna.setPreferredWidth(80);
else if (z==8) Colonna.setPreferredWidth(130);

}
TabVis.setDragEnabled(false);
ScrollVis = new javax.swing.JScrollPane(TabVis);
getContentPane().add(ScrollVis, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 30, 900, 250));
pack();

}




Questo l'errore in esecuzione quando eseguo graficamente la procedura dal form che la realizza....


Errore Database
java.lang.NullPointerException
at aeroporto.Aeroportoserver.VisualizzaVolo(Aeroporto server.java:729)
at aeroporto.Aeroportoserver.visual(Aeroportoserver.j ava:354)
at aeroporto.Aeroportoserver.access$300(Aeroportoserv er.java:20)
at aeroporto.Aeroportoserver$4.actionPerformed(Aeropo rtoserver.java:250)
at java.awt.Button.processActionEvent(Button.java:382 )
at java.awt.Button.processEvent(Button.java:350)
at java.awt.Component.dispatchEventImpl(Component.jav a:3615)
at java.awt.Component.dispatchEvent(Component.java:34 77)
at java.awt.EventQueue.dispatchEvent(EventQueue.java: 456)
at java.awt.EventDispatchThread.pumpOneEventForHierar chy(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForHierarch y(EventDispatchThread.java:151)
at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:145)
at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:137)
at java.awt.EventDispatchThread.run(EventDispatchThre ad.java:100)

floyd
01-07-2005, 19:47
guarda la riga 729

focaska
02-07-2005, 14:23
la riga 729 questa...

int numRighe1 = datiTemp.length / numColonne1;

Stavo pensando, possibile che il conto non riesce per via che su datiTemp non viene data una grandezza?
Potrebbe essere che durante l'assegnamento qualche riga sopra la cosa non riesca e la variabile rimanga vuota?

floyd
03-07-2005, 09:23
sicuramente datiTemp null

focaska
03-07-2005, 15:26
datiTemp null...ho sbagliato l'assegnamento qualche riga sopra?

ho effettuato delle piccole modifiche al codice...

public void VisualizzaVolo() {
String NumeroVoloo = NumVoloVT.getText();
if (NumeroVoloo.equals("")) new errCampiVuoti(this,false).show();
int NumeroVolo = Integer.parseInt(NumeroVoloo);
int riga = 0;
String[] nomiColonne = {"Numero Volo", "Arrivo", "Ora Partenza", "Giorno", "Mese"};
Object[][] dati;
String url = "jdbc:mysql://localhost/Aereoporto?user=root";
String query2 = "SELECT * FROM Volo WHERE NumVolo=" + NumeroVolo ;
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
} catch(Exception e){System.out.println("Errore Driver");}
try {
Connection con = DriverManager.getConnection(url,"root","");
Statement stm = con.createStatement();
ResultSet rs = stm.executeQuery(query2);
ResultSetMetaData rsmd = rs.getMetaData();
int numColonne = rsmd.getColumnCount();
rs.last();
int numRighe = rs.getRow();
rs.first();
Risul1 = new String[numRighe];
boolean prossimo = rs.first();
while(prossimo) {
Risul1[riga] = new String(rs.getString(1) + " - " + rs.getString(2) + " " + rs.getString(3) + " - " + rs.getString(4)+ " - " + rs.getString(5));
riga++;
prossimo = rs.next();
}
rs.close();
stm.close();
con.close();
} catch(SQLException e) {System.out.println("Errore Database ");e.printStackTrace();}



String[] datiTemp = Risul1;
int numColonne1 = nomiColonne.length;
int numRighe1 = datiTemp.length / numColonne1; //729
int i;
dati = new Object[numRighe1][numColonne1];
for (i=0; i<datiTemp.length; i++) {
dati[i/numColonne1][i%numColonne1] = datiTemp[i]; //733
}

TabVis = new javax.swing.JTable(dati, nomiColonne);
for (int z=0;z<nomiColonne.length;z++) {
javax.swing.table.TableColumn Colonna = null;
Colonna = TabVis.getColumnModel().getColumn(z);
if (z==0) Colonna.setPreferredWidth(50);
else if (z==3) Colonna.setPreferredWidth(100);
else if (z==4) Colonna.setPreferredWidth(150);
else if (z==6) Colonna.setPreferredWidth(30);
else if (z==7) Colonna.setPreferredWidth(80);
else if (z==8) Colonna.setPreferredWidth(130);

}
TabVis.setDragEnabled(false);
ScrollVis = new javax.swing.JScrollPane(TabVis);
getContentPane().add(ScrollVis, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 30, 900, 250));
pack();

}

ed ora mi da questo errore...

java.lang.ArrayIndexOutOfBoundsException: 0
at aeroporto.Aeroportoserver.VisualizzaVolo(Aeroporto server.java:733)
at aeroporto.Aeroportoserver.visual(Aeroportoserver.j ava:354)
at aeroporto.Aeroportoserver.access$300(Aeroportoserv er.java:20)
at aeroporto.Aeroportoserver$4.actionPerformed(Aeropo rtoserver.java:250)
at java.awt.Button.processActionEvent(Button.java:382 )
at java.awt.Button.processEvent(Button.java:350)
at java.awt.Component.dispatchEventImpl(Component.jav a:3615)
at java.awt.Component.dispatchEvent(Component.java:34 77)
at java.awt.EventQueue.dispatchEvent(EventQueue.java: 456)
at java.awt.EventDispatchThread.pumpOneEventForHierar chy(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForHierarch y(EventDispatchThread.java:151)
at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:145)
at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:137)
at java.awt.EventDispatchThread.run(EventDispatchThre ad.java:100)

sempre per via che datitemp null?
Come posso passare la stringa che viene fuori dalla query a datitemp in modo che si venga a creare la tabella?

floyd
03-07-2005, 16:47
credo che numColonne1 sia 0
stampalo e guarda come crei l'array bidimensionale

focaska
05-07-2005, 09:45
Grazie a chi mi ha aiutato...la procedura ora funziona correttamente, ora poster il codice corretto in caso altri abbiano lo stesso problema.

Loading