# einfache DB-Verbindungsklasse



## Petra30 (19. Apr 2008)

Hallo,

ich schreibe gerade eine einfache DB-Verbindungsklasse. Leider bekomme ich immer diese Fehlermeldungen. Wenn ich einfach alle Funktionen in die main-Methode packe, funktioniert die Verbindung, aber durch die Methoden-Einteilung und die statischen Variablen geht garnichts mehr ?! 

unreported exception java.sql.SQLException; must be caught or declared to be thrown
            con.close();         
unreported exception java.sql.SQLException; must be caught or declared to be thrown
            myStatement.close();  
unreported exception java.sql.SQLException; must be caught or declared to be thrown
        myStatement = con.createStatement();
java.sql.SQLException; must be caught or declared to be thrown
        ResultSet result = myStatement.executeQuery(mysql_query);  


```
import java.sql.*;
import java.util.*;
import java.io.*;


public class DBConnection {
    
  static Statement myStatement = null;
  static Connection con = null;
    
  public DBConnection(){    

       try {
            Class.forName("org.apache.derby.jdbc.ClientDriver");
            con = DriverManager.getConnection("jdbc:derby://localhost:1527/myDB");
       }
        catch (Exception e) {
            System.out.println("EXCEPTION: " + e.getMessage());
            e.printStackTrace();
        }
 }  
  

    public void disconnect(){     
        
        if(con!=null){
            con.close();         
        } 
        
        if(myStatement!=null){         
            myStatement.close();  
        }
    }
    
    
    //nimmt eine MySql anfrage entgeben, gibt ResultSet zurück
    
    public ResultSet getResultSet(String mysql_query){   
        
        myStatement = con.createStatement();
        ResultSet result = myStatement.executeQuery(mysql_query);                  
         
        return result;   
           
    }

}
```
[/quote]


----------



## Prismapanda (19. Apr 2008)

Wieso behebst du nicht erstmal die (von dir sogar) genannten Fehler im Code? Fange die Excecptions auf oder gib in der Signatur der Methoden an, dass sie geworfen werden können ...
btw: warum ist die Connection und das Statement static?


----------



## Petra30 (19. Apr 2008)

Habe jetzt das abfangen der Fehler mit try und catch eingebaut. Der Code funktioniert nun einwandfrei *jippi*. Ich dachte try und catch wären immer optional, denn wenn kein Fehler erzeugt wird, muss ja auch keiner abgefangen werden.

Connection und Statement sind static, damit sie mit der Methode public void disconnect() geschlossen werden können. Wenn ich ich richtig verstanden habe, sind static Variablen Klassenvariablen, d.h. sie können innerhalb jeder Methode der Klasse geändert werden. Eine globale Variable für eine Klasse sozusagen. Oder habe ich das komplett missverstanden ? Bin leiderr noch Java-Anfänger


----------



## Guest (19. Apr 2008)

Siehe letzte Antwort hier: http://www.java-forum.org/de/viewtopic.php?t=45377


----------



## Prismapanda (19. Apr 2008)

Ja, das mit den statischen Variablen hast du leider ein wenig missverstanden. Variablen, die als _static_ deklariert werden, sind sog. *Klassenvariablen*, d.h. dass diese für alle Klassen dieser Art gleich sind. Demnach gäbe es für alle DBConnection Instanzen nur eine Connection und nur ein Statement (eben klassenübergreifend). Es kann jedoch durchaus vorkommen, dass man mehrere DBConnections haben möchte, was mit statischen Variablen nicht geht. Deshalb als nicht-statische *Instanzvariable* deklarieren. Du kannst mit beiden Arten über die gesamte Klasse hinweg auf die Variablen zugreifen, also stellt das keine Beschränkung dar. Meiner Meinung nach sollten sie auch als private deklariert werden, damit der Gebrauch von diesen hinter der Klasse verborgen wird. SW: Information Hiding. Schließlich möchtest du ja möglichst von den ausführenden Details (wie etwa Connection und Statement) abstrahieren.
Hoffe das hilft erstmal ein wenig weiter, ansonsten gibt es ja genug Literatur und Tutorials zum Thema...
PP


----------

