2016-06-11 7 views
0

Ich verwende DbUtils-Bibliothek mit QueryRunner-Klasse, um meine Abfragen auszuführen. Aus meiner Unterschätzung der DbUtils-Dokumentation muss ich mir keine Gedanken über das Schließen von Verbindungen machen. Aus irgendeinem Grund schließt es meine Verbindungen nicht automatisch oder sogar manuell. Hier ist mein Code:Verwenden von DbUtils QueryRunner schließt Datenbankverbindungen nicht

public static DataSource createDataSource() { 
    BasicDataSource d = new BasicDataSource(); 
    d.setDriverClassName(Globals.getInstance().getKonfiguracija().dajPostavku("driver")); 
    d.setUsername(Globals.getInstance().getKonfiguracija().dajPostavku("dbUsername")); 
    d.setPassword(Globals.getInstance().getKonfiguracija().dajPostavku("dbPassword")); 
    d.setUrl(Globals.getInstance().getKonfiguracija().dajPostavku("serverDatabase")); 
    return d; 
} 

public static void insertSQL(String sql) 
{ 
    DataSource dataSource = createDataSource(); 
    QueryRunner qr = new QueryRunner(dataSource); 

    try { 
     int inserts = qr.update(sql); 
     qr.getDataSource().getConnection().close(); 

    } catch (SQLException ex) { 
     Logger.getLogger(DBController.class.getName()).log(Level.SEVERE, null, ex); 
    } 

} 

Da im Gewinde, die periodisch InsertSQL Methode aufruft, nach einiger Zeit, die ich „Zu viele Verbindungen“ Fehler. Ich benutze die neueste Version von Tomcat und Datenbank ist MYSQL.

Antwort

1

Sie erstellen einen neuen DataSource bei jedem Aufruf der insertSQL() Methode: Dies ist wahrscheinlich die Ursache der Ausnahme.

Stattdessen sollten Sie die DataSource einmal erstellen und dann die Instanz auf das QueryRunner Konstruktor übergeben, zum Beispiel:

QueryRunner queryRunner = new QueryRunner(dataSource); 

ein DataSource benutzen, Sie müssen in der Regel nicht manuell die Verbindung schließen.

Weitere Beispiele finden Sie unter https://commons.apache.org/proper/commons-dbutils/examples.html.

+0

Es könnte helfen, Ill es ausprobieren, thx – Selfcoded