PDA

View Full Version : java.lang.NullPointerException bei jdbc zugriff



burton007
02-09-05, 10:27
Hallo,
ich habe ein sehr eigenartiges problem während des auslesens eines DB2-Files aus einer AS400.
Das Progrämmchen funktioniert einwandfrei, solange ich die im Code rot markierte Zeile auskommentiere!
Sobald einmal der Zwischenschritt zum speichern einer Zeile in ein String Array ausgeführt wird bekomme ich
genau bei dieser Zeile eine java.lang.NullPointerException ?! Verstehe absolut nicht, warum ohne dieser Zeile das
ganze File ausgelesen werden kann und wenn ich diese Zeile einbinde, sofort abgebrochen wird! Das Ablegen des Eintrages in einen normalen String funktioniert ja einwandfrei! Bin Neuling mit JDBC und hoffe ihr könnt mir weiterhelfen. Vielen Dank im voraus


public void DatenBankResult() throws SQLException{
int i=1;
String[] liste = null;
try{
DriverManager.setLogWriter( new PrintWriter(System.out) );
Class.forName( "com.ibm.as400.access.AS400JDBCDriver" );
for ( Enumeration e = DriverManager.getDrivers(); e.hasMoreElements(); )
driverinfo.setText(e.nextElement().getClass().getN ame());
con = DriverManager.getConnection("jdbc:as400://as400.evva.com/qdls/qsys.lib/evva.lib/liste132.file/liste132.mbr","XXX","XXX");
stmt = con.createStatement();
rs = stmt.executeQuery("SELECT * FROM EVVA.LISTE132");
while (rs.next()){
String text = rs.getString(i);
System.out.println(text);
liste[i] = text;
i++;
}
rs.close();
con.close();
stmt.close();
}
catch(Exception e)
{
e.printStackTrace();
System.err.println("Fehler: "+e.getMessage());
System.exit(1);
}
}

Fuerchau
02-09-05, 11:30
Scheint mir, das das Array liste nicht initialisiert ist, mit anderen Worten, die Definition des Arrays ist wohl falsch.

burton007
02-09-05, 11:58
String[ ] liste = null;

...ist doch die korrekte schreibweise, oder?

mfg

Fuerchau
02-09-05, 12:36
Dies ist ein leeres Array !
Entweder du nimmst ein Array fester Grösse:
String[ 100 ] liste;
Oder du ermittelst die Anzahl dynamisch und definierst dann:
String[ ] liste = new String[Anzahl];

Oder du nimmst eine Collection (o.ä.).

burton007
02-09-05, 13:27
mein problem ist jetzt nur mehr, dass ich keinen befehl finde
mit dem ich die anzahl der einträge des files herausfinden kann!

was ist der vorteil der collections??

mfg

Fuerchau
02-09-05, 14:13
Dass ich die Größe nicht genau kennen muss, z.B.:

Vector x = new Vector();
x.add("String1");
x.add(.....)

if (x.size > 0) {
String s = x.get(0);
}

usw. usw.
Es gibt viele Typen von Collections:
Vector
Map
Stack
HashTable
:
:

Allerdings solltest du bei sowas auf deinen Speicher achten, da du nicht nur die SQL-Daten sondern auch noch eine Kopie davon im Speicher hast.
Besser wäre eine sofortige Verarbeitung durchzuführen und frühzeitig wieder zu verwerfen (=>Performance).

BenderD
02-09-05, 14:52
Hallo,

ein Arrray in Java ist ein Objekt, das erzeugt werden muss; was willst du denn eigentlich mit dem Text in dem String Array???

mfg

Dieter Bender


Hallo,
ich habe ein sehr eigenartiges problem während des auslesens eines DB2-Files aus einer AS400.
Das Progrämmchen funktioniert einwandfrei, solange ich die im Code rot markierte Zeile auskommentiere!
Sobald einmal der Zwischenschritt zum speichern einer Zeile in ein String Array ausgeführt wird bekomme ich
genau bei dieser Zeile eine java.lang.NullPointerException ?! Verstehe absolut nicht, warum ohne dieser Zeile das
ganze File ausgelesen werden kann und wenn ich diese Zeile einbinde, sofort abgebrochen wird! Das Ablegen des Eintrages in einen normalen String funktioniert ja einwandfrei! Bin Neuling mit JDBC und hoffe ihr könnt mir weiterhelfen. Vielen Dank im voraus


public void DatenBankResult() throws SQLException{
int i=1;
String[] liste = null;
try{
DriverManager.setLogWriter( new PrintWriter(System.out) );
Class.forName( "com.ibm.as400.access.AS400JDBCDriver" );
for ( Enumeration e = DriverManager.getDrivers(); e.hasMoreElements(); )
driverinfo.setText(e.nextElement().getClass().getN ame());
con = DriverManager.getConnection("jdbc:as400://as400.evva.com/qdls/qsys.lib/evva.lib/liste132.file/liste132.mbr","XXX","XXX");
stmt = con.createStatement();
rs = stmt.executeQuery("SELECT * FROM EVVA.LISTE132");
while (rs.next()){
String text = rs.getString(i);
System.out.println(text);
liste[i] = text;
i++;
}
rs.close();
con.close();
stmt.close();
}
catch(Exception e)
{
e.printStackTrace();
System.err.println("Fehler: "+e.getMessage());
System.exit(1);
}
}

burton007
02-09-05, 14:55
danke für deine tipps, werd mir das mit dem
vector auf jedenfall überlegen!

mfg

burton007
02-09-05, 15:08
eigentlich will i jetzt eh nichts mehr von dem string array, werd
das ganze mit vector machen, hab nur irgendwie an das nicht
gedacht...