原程序如下:public class test2 {public static void main(String[] args) throws ClassNotFoundException, SQLException
{
Class.forName("com.mysql.jdbc.Driver");
String DBUrl = "jdbc:"+Config.DBType+"://"+Config.DBHost+":"+Config.DBPort+"/"+Config.DBSchema+"?useUnicode=true&characterEncoding=GB2312&autoReconnect=true";
for(int i=0;i<10000;i++)
{
Connection conn = DriverManager.getConnection(DBUrl,Config.DBUser,Config.DBPassword);
System.out.println(i);
conn.close();
}
}
}输出结果为:0
1
2
...
4043
4044
4045(出现异常是i的值不固定,有时是几十,有时是几百)
Exception in thread "main" com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: Server connection failure during transaction. Due to underlying exception: 'java.net.SocketException: java.net.BindException: Address already in use: connect'.** BEGIN NESTED EXCEPTION **java.net.SocketException
MESSAGE: java.net.BindException: Address already in use: connectSTACKTRACE:java.net.SocketException: java.net.BindException: Address already in use: connect
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:156)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:276)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2815)
at com.mysql.jdbc.Connection.<init>(Connection.java:1531)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at test2.main(test2.java:24)
** END NESTED EXCEPTION **
Attempted reconnect 3 times. Giving up.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:888)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2890)
at com.mysql.jdbc.Connection.<init>(Connection.java:1531)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at test2.main(test2.java:24)
请问这种问题如何解决??

解决方案 »

  1.   

    应该是服务器端过载  虽然客户端close了连接 但服务器端的服务进程一般不会马上关闭 会有一个延时时间 你可以试试在循环中加延时解决方法:
    改进客户端代码,减少连接数量(推荐方法)
    增加服务器连接数
      

  2.   

    不要把数据库连接处理放到for里面。
    如果没有特殊需要,
    一个程序享用一个数数据库连接就已经足够了。跟数据库建立连接是非常耗费资源的,
    Java抛出这样例外是因为可连接的数据库资源已经耗尽