Java和MySql连接问题

Java和MySql连接问题,java,mysql,database,jdbc,connection,Java,Mysql,Database,Jdbc,Connection,我正在使用Java+MySql。我正在尝试添加批量数据(大约4000万条记录)。我的应用程序可以处理几十万条记录,但在这之后,它开始给我以下异常: Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseco

我正在使用Java+MySql。我正在尝试添加批量数据(大约4000万条记录)。我的应用程序可以处理几十万条记录,但在这之后,它开始给我以下异常:

Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2333)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2370)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2154)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
    at sun.reflect.GeneratedConstructorAccessor5.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:381)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at net.jboss.Database.DatabaseConnection.getConnection(DatabaseConnection.java:48)
    at net.jboss.emp.idm.adta(mde.java:96)
    at net.jboss.emp.idm.main(mde.java:69)
Caused by: java.net.SocketException: No buffer space available (maximum connections reached?): connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(Unknown Source)
    at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:257)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:294)
    ... 16 more
线程“main”com.mysql.jdbc.exceptions.jdbc4.CommunicationsException中的异常:通信链路故障 成功发送到服务器的最后一个数据包是0毫秒前的。驱动程序尚未从服务器收到任何数据包。 位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) 位于sun.reflect.NativeConstructorAccessorImpl.newInstance(未知源) 位于sun.reflect.delegatingConstructor或AccessorImpl.newInstance(未知源) 位于java.lang.reflect.Constructor.newInstance(未知源) 位于com.mysql.jdbc.Util.HandleneInstance(Util.java:411) 位于com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116) 位于com.mysql.jdbc.MysqlIO(MysqlIO.java:344) 位于com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2333) 位于com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2370) 位于com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2154) 位于com.mysql.jdbc.ConnectionImpl(ConnectionImpl.java:792) 位于com.mysql.jdbc.JDBC4Connection(JDBC4Connection.java:47) 位于sun.reflect.GeneratedConstructorAccessor5.newInstance(未知源) 位于sun.reflect.delegatingConstructor或AccessorImpl.newInstance(未知源) 位于java.lang.reflect.Constructor.newInstance(未知源) 位于com.mysql.jdbc.Util.HandleneInstance(Util.java:411) 位于com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:381) 位于com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305) 位于java.sql.DriverManager.getConnection(未知源) 位于java.sql.DriverManager.getConnection(未知源) 位于net.jboss.Database.DatabaseConnection.getConnection(DatabaseConnection.java:48) net.jboss.emp.idm.adta(mde.java:96) net.jboss.emp.idm.main(mde.java:69) 原因:java.net.SocketException:没有可用的缓冲区空间(已达到最大连接数?):连接 位于java.net.PlainSocketImpl.socketConnect(本机方法) 位于java.net.PlainSocketImpl.doConnect(未知源) 位于java.net.PlainSocketImpl.connectToAddress(未知源) 位于java.net.PlainSocketImpl.connect(未知源) 位于java.net.socksocketimpl.connect(未知源) 位于java.net.Socket.connect(未知源) 位于java.net.Socket.connect(未知源) 位于java.net.Socket。(未知源) 位于java.net.Socket。(未知源) 位于com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:257) 在com.mysql.jdbc.MysqlIO上(MysqlIO.java:294) ... 还有16个
我在谷歌上搜索了这个问题,并尝试了几乎所有的选项(更新windows注册表、更改my.cnf文件、更改mysql全局参数等),但都不起作用。

似乎连接没有正确关闭。我建议你使用c

另请参见


这可以立即解决您的问题:)
这可能是由于与mysql的连接中断或
你的代码无法关闭现有的连接,因为你说它可以启动一些记录。因此,如果mysql接受来自其他程序的连接,请增加与mysql的最大连接,或者在收到此错误消息时尝试与其他程序进行检查。

几个小时前,我遇到了类似的问题。使用默认设置,我可以在一个事务中写入大约15K条记录。尝试写更多的内容时,得到了完全相同的消息(“没有可用的缓冲区空间(达到最大连接数?):connect”)

然后,我将事务分解为1000条记录(我的应用程序要求允许这样做),在第15次迭代之后,我仍然收到消息。我的应用程序正在努力创建一个新的EntityManager,并在每次迭代中关闭它

解决方案是在迭代之间清除特定类型实体的缓存(也可以按实体清除缓存)


EntityManagerFactory.getCache().ReceiveAll或Receive(…)

我遇到了完全相同的问题,我通过
connectionname.close()修复了它语句

谢谢回复,我正在正确地打开和关闭连接。如果是这种情况,那么为什么它适用于前几十万条记录?错误消息是
(已达到最大连接数?)
可能是在某些事务之后,连接没有被正确关闭,因此结果是..我仔细检查了一下,没有发现连接总数有任何问题。请随意在此处发布您的jdbc驱动程序注册代码。请向我们展示您的代码。我的猜测是,您正在为每个记录打开连接,但忘记关闭它(您应该只打开一次,然后使用参数化查询)。请在此处发布答案,而不是链接到您的wordpress