2013-07-04 2 views
1

Я делаю приложение Java, которое покажет список автоколонн, которые будут загружать продукт на заводе. На этот раз я использую цикл для обновления отображения, прочитав из (MySQL) Database каждую секунду, и я столкнулся с ошибкой «слишком много соединений».Слишком много соединений на JAVA с MySQL

Есть ли другой способ для этого. Я посмотрел на триггер базы данных, но я все еще не понял этого.

+0

так почему бы вам не использовать соединение много раз? что-то вроде [объединение] (http://arashmd.blogspot.com/2013/06/java-threading.html#trpool) –

ответ

3

использовать статический объект подключения или использовать пул соединений.

http://www.mchange.com/projects/c3p0/

или

http://commons.apache.org/proper/commons-dbcp/

Вот простой пример использования C3P0 апи

package com.chetan.dbconnection; 

import java.beans.PropertyVetoException; 
import java.io.IOException; 
import java.io.InputStream; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 
import java.util.Properties; 

import javax.sql.DataSource; 

import com.mchange.v2.c3p0.ComboPooledDataSource; 


public class ConnectionProvider { 
private static String SERVER = "localhost"; 
private static String PORT = "3306"; 
private static String DATABASE = "yourdb"; 
private static String UID = "root"; 
private static String PWD = "password"; 
private static Connection conn; 
private static DataSource ds; 

public static Connection getConnection() { 

    try { 
     if (ds == null) { 
      ds = setupDataSource(); 
     } 
     if (conn == null || conn.isClosed()) { 
      conn = ds.getConnection(); 
     } 

     return conn; 
    } catch (SQLException e) { 

     e.printStackTrace(); 
    } 
    return null; 

} 

private static DataSource setupDataSource() { 
    ComboPooledDataSource cpds = new ComboPooledDataSource(); 
    try { 

     String server = prop.getProperty("SERVER", SERVER); 
     String port = prop.getProperty("PORT", PORT); 
     String db = prop.getProperty("DATABASE", DATABASE); 
     String uid = prop.getProperty("UID", UID); 
     String pwd = prop.getProperty("PWD", PWD); 

     log.info("Getting new database connection"); 
     String driver = "com.mysql.jdbc.Driver"; 
     String dbUrl = "jdbc:mysql://" + server + ":" + port + "/" + db 
       + "?autoReconnect=true"; 

     try { 
      cpds.setDriverClass(driver); 
     } catch (PropertyVetoException e) { 
      e.printStackTrace(); 
     } 
     cpds.setJdbcUrl(dbUrl); 
     cpds.setUser(uid); 
     cpds.setPassword(pwd); 
     cpds.setMinPoolSize(1); 
     cpds.setInitialPoolSize(1); 
     cpds.setAcquireIncrement(1); 
     cpds.setMaxPoolSize(20); 
     //cpds.setUnreturnedConnectionTimeout(100); 
    } catch (IOException e1) { 
     e1.printStackTrace(); 
    } 

    return cpds; 

} 
} 
+0

Спасибо, я пытаюсь как-то использовать это в своем коде. – user2549814

0

убедитесь, что у убейте связи, как только они достигли своей цели. это становится сложным с перемещением наборов результатов по нашим классам, вы можете захотеть получить один класс, в котором запросе u для наборов результатов, назначить их некоторому привлекательному многостраничному arraylist или любой коллекции u, который удобен в использовании и убивает соединение там, а затем и передает данных, насколько вы можете сохранить его в живых. так что у вас нет связи со многими связями.

У меня в основном построено целое приложение только для одного соединения ... хотя это было довольно просто. ура!

Смежные вопросы