connection_1 ist möglicherweise nicht initialisier
Von: , Frage gestellt am Di, 1. Mär 2005
Hi ich bin eigentlich sehr froh, mein erstes Java Progrämmchen, das mit DB2 arbeitet, läuft ganz nett... bis auf eine Unwesentlichkeit.
Ganz am Ende des Quelltextes stöhrt sich der Compiler daran,
dass <code>connection_1.close();</code>
geschlossen werden soll, was ich aber gar nicht einsehen kann.
Kommentiere ich die Zeile aus läuft alles prima.
Es meldet:
Exception in thread "main" java.lang.Error: Unaufgelöstes Kompilierungsproblem:
Die lokale Variable connection_1 ist möglicherweise nicht initialisiert.
Ich kopier hier mal den kompletten Code rein,
ihr seht sicher gleich wo der Hacken ist. Danke :)
Übrigens, als nächsten Schritt muss ich diese Applikaton in ein Applet umwandeln... ist das einfach?
import java.sql.* ;
public class HelloWorld {
// public - Nur Klassen, die als public deklariert wurden, sind außerhalb des Pakets sichtbar, in dem sie definiert wurden.
public static void main(String[] args) {
/*
public
Membervariablen und Methoden vom Typ public sind im Rahmen ihrer Lebensdauer überall sichtbar.
Sie können daher in der eigenen Klasse und von beliebigen Methoden anderer Klassen verwendet werden.
static
Variablen und Methoden mit dem Attribut static sind nicht an die Existenz
eines konkreten Objekts gebunden,
sondern existieren vom Laden der Klasse bis zum Beenden des Programms.
*/
System.out.println("Hello world 1 !");
/* #$hDB = odbc_connect('datenquelle','sasaus42','milchshake');
if( !$hDB = odbc_connect('datenquelle','','') ){ */
//final String url = "datenquelle";
final String url = "jdbc:db2:test" , user = "" , pass = "" ;
final String ausgabe_anfang = "\n_____________\n";
/* final
Membervariablen mit dem Attribut final dürfen nicht verändert werden, sind also als Konstanten anzusehen. */
Connection connection_1; String ausgabe; ResultSet resultSet_1;
try {
Class.forName("COM.ibm.db2.jdbc.app.DB2Driver");
connection_1 = DriverManager.getConnection(url, user, pass);
ausgabe = "\n getConnection() ist zustaendig fuer den Aufbau einer Verbindung zu einer Datenbank"
+ "\n und existiert in zwei Varianten: mit Angabe von Benutzername und Passwort und"
+ "\n ohne diese Angabe.";
System.out.println( ausgabe_anfang + "connected to database" + ausgabe);
/* createStatement erzeugt Statement- Object.
Statement- Object kann dazu verwendet werden unparametrisierte Abfragen und
Änderungen zu erzeugen. */
Statement statement_1 = connection_1.createStatement();
//System.out.println( ausgabe_anfang + "statement_1=" + statement_1 );
resultSet_1 = statement_1.executeQuery("SELECT * FROM BERG");
ResultSetMetaData resultSetMetaData_1 = resultSet_1.getMetaData();
/* getMetaData
Nachdem die Verbindung hergestellt wurde,
liefert der Aufruf von getMetaData ein Objekt des Typs DatabaseMetaData.
Es kann dazu verwendet werden, weitere Informationen über die
Datenbank abzufragen. */
int numCols = resultSetMetaData_1.getColumnCount();
/* statement_1.getResultSet()
gibt eine risiege Menge informativem Text aus.
Das Objekt ResultSet repräsentiert die Ergebnismenge. */
while( resultSet_1.next() ){
System.out.println( ausgabe_anfang ) ;
for(int i = 1; i <= numCols ;i++){
// Mittels resultSet_1.getString(1) wird die erste Spalte ausgegeben.
String erg = resultSet_1.getString( i );
System.out.print( erg + " " ) ;
// System.exit(1); beendet das Programm und zeigt einen Fehlertext
// System.exit(0); beendet das Programm (zeigt keinen Fehlertext)
} } }
catch ( SQLException sqlException_1 ) {
/* In der catch-Klausel wird nicht nur die Art des abzufangenden Fehlers definiert,
sondern auch ein formaler Parameter angegeben (hier sqlException_1),
der beim Auftreten der Ausnahme ein Fehlerobjekt übernehmen soll.
Alle Laufzeitfehler in Java sind Unterklassen der Klasse Throwable.
*/
/* Die Klasse SQLException
Wenn SQL-Anweisungen fehlschlagen, lösen sie normalerweise
eine Ausnahme des Typs SQLException aus.
Das gilt sowohl, wenn keine Verbindung zur Datenbank zustande gekommen ist,
als auch bei allen Arten von Syntaxfehlern in SQL-Anweisungen.
Auch bei semantischen Fehlern durch falsche Typisierung
oder inhaltlich fehlerhafte SQL-Anweisungen wird eine solche Ausnahme ausgelöst.
SQLException ist eine Erweiterung der Klasse Exception.
*/
if( true ){
// Eine Möglichkeit der Ausgabe von SQL-Fehlern.
System.out.println( "sqlException_1=" + sqlException_1 );
}else
// Eine andere Möglichkeit der Ausgabe von SQL-Fehlern.
while ( sqlException_1 != null) {
System.err.println(sqlException_1.toString());
System.err.println("SQL-State: " + sqlException_1.getSQLState());
// getSQLState liefert den internen SQL-Zustandscode.
System.err.println("ErrorCode: " + sqlException_1.getErrorCode());
// getErrorCode liefert herstellerspezifischen Fehlercode.
sqlException_1 = sqlException_1.getNextException();
/* getNextException
Etwas ungewöhnlich ist die Methode getNextException,
denn sie unterstützt die Verkettung von Ausnahmen.
Jeder Aufruf holt die nächste Ausnahme aus der Liste.
Ist der Rückgabewert null, gibt es keine weiteren Ausnahmen.
*/
}
}
catch (Throwable thr) {
// Alle Laufzeitfehler in Java sind Unterklassen der Klasse Throwable.
// Oben werden daher vermutlich, alle (restlichen) Fehler abgefangen.
thr.printStackTrace();
}
/* Der Bereich finally wird auf jeden Fall durchschritten.
Die finally-Klausel ist also der ideale Ort,
um Aufräumarbeiten durchzuführen.
Hier können beispielsweise Dateien geschlossen oder Ressourcen freigegeben werden.
*/
finally {
try {
connection_1.close();
ausgabe = "\n close() "
+ "\n gibt die Ressourcen eines Statementobjekts wieder frei.";
System.out.println( ausgabe_anfang + "connected to database" + ausgabe);
}
catch (Throwable thr2) {}
}
System.out.println("Hello world 2 ! Hier endet das Programm.");
} }
