2017-09-01 132 views
3

我是java的新手,我需要關於如何在我的java應用程序項目中爲JDBC創建連接池的幫助。 我已經能夠連接到我的數據庫,但我的應用程序的性能很慢,因爲我在每個幀上調用連接,因爲我在YouTube上看到很多視頻教程。用Java創建JDBC連接池

這是我如何連接到數據庫。我在我的大部分幀中調用每個幀中的連接,如DBConnection.getConnectDB()

如何在NetBeans中爲Java創建JDBC連接池。謝謝

DBCONNECT

public class DBConnection { 


    public static Connection ConnectDB(){ 

     try{ 
      Class.forName("com.mysql.jdbc.Driver"); 
      Connection conn = DriverManager.getConnection("jdbc:mysql://server/db_name","user","pass"); 
      System.out.println("Connected"); 
      return conn; 
     } 
     catch(Exception ex){ 

      JOptionPane.showMessageDialog(null, ex); 
      return null; 
     }}  
} 

更新

public static Connection ConnectDB(){ 


HikariConfig config = new HikariConfig(); 

config.setJdbcUrl( 「JDBC:MySQL的://本地主機:3306 /辛普森一家」);

config.setUsername("username"); 
config.setPassword("pass"); 
config.addDataSourceProperty("cachePrepStmts", "true"); 
config.addDataSourceProperty("prepStmtCacheSize", "250"); 
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048"); 

HikariDataSource ds = new HikariDataSource(config); 
    return (Connection) new HikariDataSource(config); 

    } 

} 

控制檯

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
SLF4J: Defaulting to no-operation (NOP) logger implementation 
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 
Exception in thread "AWT-EventQueue-0" com.zaxxer.hikari.pool.HikariPool$PoolInitializationException: Failed to initialize pool: Access denied for user 'qweqsbra_wagyingo'@'197.251.142.100' (using password: YES) 
    at com.zaxxer.hikari.pool.HikariPool.throwPoolInitializationException(HikariPool.java:543) 
    at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:535) 
    at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:111) 
    at com.zaxxer.hikari.HikariDataSource.<init>(HikariDataSource.java:72) 
    at wagyingohostel.DBConnection.DBConnection.ConnectDB(DBConnection.java:41) 
    at wagyingohostel.LoginAndRegistration.Login.<init>(Login.java:34) 
    at wagyingohostel.LoginAndRegistration.Login$4.run(Login.java:228) 
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756) 
    at java.awt.EventQueue.access$500(EventQueue.java:97) 
    at java.awt.EventQueue$3.run(EventQueue.java:709) 
    at java.awt.EventQueue$3.run(EventQueue.java:703) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:726) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 
Caused by: java.sql.SQLException: Access denied for user 'qweqsbra_wagyingo'@'197.251.142.100' (using password: YES) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:964) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:873) 
    at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1710) 
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1226) 
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2198) 
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2229) 
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2024) 
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:779) 
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) 
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:389) 
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:330) 
    at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:112) 
    at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:118) 
    at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:358) 
    at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) 
    at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:443) 
    at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:514) 
    ... 19 more 
BUILD SUCCESSFUL (total time: 20 seconds) 
+0

是否使用多線程的數據庫訪問? –

+0

不要將UI代碼與其他圖層混合使用。這是一個非常淺的「池」 - 它只有一個連接。使用你的上級寫給你的書(例如DBCP)。 – duffymo

+0

@ PM77-1,有多線程。我的應用程序需要很長時間來響應,當我嘗試從一個幀導航到另一個 – XamarinDevil

回答

2

如果你正在使用maven或gradle(你應該是)您可以使用像HikariCP這樣的池並創建一個像這樣的jdbc連接池。

HikariConfig config = new HikariConfig(); 
config.setJdbcUrl("jdbc:mysql://localhost:3306/simpsons"); 
config.setUsername("bart"); 
config.setPassword("51mp50n"); 
config.addDataSourceProperty("cachePrepStmts", "true"); 
config.addDataSourceProperty("prepStmtCacheSize", "250"); 
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048"); 

HikariDataSource ds = new HikariDataSource(config); 

這裏是一個更詳細的example configuring multiple hikaricp pools

+0

創建一個類文件?我需要導入HikariConfig嗎?它會引發錯誤 – XamarinDevil

+1

是的,您需要導入Jar。方向可以在這裏找到使用maven/gradle https://github.com/brettwooldridge/HikariCP。 –

+0

請看我的更新...我得到這個錯誤'SLF4J:無法加載類「org.slf4j.impl.StaticLoggerBinder」。 SLF4J:默認爲無操作(NOP)記錄器實施 SLF4J:請參閱http://www.slf4j.org/codes.html#StaticLoggerBinder獲取更多詳細信息。' – XamarinDevil