# getConnection() liefert null



## Gast2 (25. Jan 2010)

Hi,
ich habe bei meiner Anwendung das Problem dass ich abundzu keine Verbindung zur Datenbank bekomme.

Mein Code sieht so aus (Klasse DBConnector) :

```
public static synchronized void init() throws SQLException, ClassNotFoundException {
    // DB Einstellungen laden
    host = Settings.getString("DATABASE", "host");
    port = Settings.getInt("DATABASE", "port");
    user = Settings.getString("DATABASE", "user");
    password = Settings.getString("DATABASE", "password");
    database = Settings.getString("DATABASE", "databasename");
    autoReconnect = Settings.getBoolean("DATABASE", "autoreconnect");

    try {
        // Treiber laden
        Class.forName("com.mysql.jdbc.Driver").newInstance();
    } catch (IllegalAccessException iae) {
        logger.error(null, iae);
    } catch (InstantiationException ie) {
        logger.error(null, ie);
    }

    // Datasource konfigurieren
    dataSource = new BasicDataSource();
    dataSource.setDriverClassName("com.mysql.jdbc.Driver");
    dataSource.setUsername(user);
    dataSource.setPassword(password);
    dataSource.setUrl("jdbc:mysql://" + host + ":" + port + "/" + database + (autoReconnect ? "?autoReconnect=true" : ""));
    dataSource.setTimeBetweenEvictionRunsMillis(1000);
    dataSource.setTestOnBorrow(true);
    dataSource.setValidationQuery("SELECT 1;");
    dataSource.setMaxWait(1000);

    // Verbindung testen
    testConnection(host, port, user, password);
    logger.info("Datenbankverbindungen aufgebaut");
}
```
Das ist meine Konfiguration, die beim Programmstart einmal gesetzt wird.
Wenn jetzt ein Programmteil eine Verbindung braucht besorgt er sich die mit folgender Methode:

```
public static Connection getConnection() {
    synchronized (monitor) {
        Connection con = null;
        try {
            con = dataSource.getConnection();
        } catch (SQLException sqle) {
            try {
                /* Ein Retryversuch */
                con = dataSource.getConnection();
            } catch (SQLException aqle2) {
                logger.error("Fehler beim Verbinden zur Datenbank", sqle2);
                logger.debug("Username: " + dataSource.getUsername());
                logger.debug("Password: " + dataSource.getPassword());
                logger.debug("URL: " + dataSource.getUrl());
                logger.debug("Treiber: " + dataSource.getDriverClassName());
            }
        }
        return con;
    }
}
```

Kann sich jemand vorstellen warum es da zu Problemen kommen kann?

EDIT:
Hier noch die Exception:


> org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object
> Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
> at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:104)
> at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
> ...



Gruß,
Eike


----------



## Gast2 (25. Jan 2010)

Sry für Doppelpost, aber da is anscheinend irgendwie nen Beitrag verloren gegangen?!



> Firestorm87 hat auf das Thema 'getConnection() liefert null' im Forum 'Datenbankprogrammierung' bei java-forum.org geantwortet.
> 
> Dieses Thema ist hier zu finden:
> http://www.java-forum.org/datenbankprogrammierung/95238-getconnection-liefert-null-new-post.html
> ...



Ne NullPointerException wir bei mir geworfen, weil meine getConnection()-Methode null zurückliefert. Das passiert weil ne SQLException geworfen wird. Die Frage ist nun woran das liegen könnte. Hat da niemand ne Idee zu?


----------



## Firestorm87 (25. Jan 2010)

Den Beitrag habe Ich löschen lassen, da Ich nach dem schreiben erst gesehen habe, was für ein Schwachsinn Ich da zusammen getippt habe 
Es war eindeutig noch zu früh am Morgen 

Vll schau Ich mir das Heut Abend nach Feierabend noch mal an....


----------



## Gast2 (26. Jan 2010)

Ich konnte das Problem eingrenzen. Sobald ich mehr als 8 offene Verbindungen erstellen wollte, gabs o.g. Exception.
Ich habe jetzz maxActive auf 20 gesetzt. Das Problem scheint behoben.
Wie schaut das mit den anderen Werten aus, minActive, minIdle, maxIdle, initialSize. Wie sollte man diese Konfigurieren?
Gibt es noch andere Einstellungen die an der DataSource gemacht werden sollten?


----------

