`
zyn010101
  • 浏览: 320213 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java类大批量导入数据到MYSQL

阅读更多

      今天在写一个java类,用jdbc批量更新某表一个字段,该字段需要查询其他多张表进行计算得出,中间用了许多select查询,最后拼装成update语句用jdbc操作,当导入到200多条的时候,报错了,提示数据库连接已经用完(我每次调用的时候连接都记得关闭了,程序逻辑没有问题),具体信息如下:

15:50:12 [ERROR] com.zyn.hibernate.test.DataSourceHelper.getConnectionByJdbc(76)
	使用JDBC数据源获得数据库连接出错:The driver was unable to create a connection due to 

an inability to establish the client portion of a socket.

This is usually caused by a limit on the number of sockets imposed by the operating system. 

This limit is usually configurable. 

For Unix-based platforms, see the manual page for the 'ulimit' command. Kernel or system 

reconfiguration may also be required.

For Windows-based platforms, see Microsoft Knowledge Base Article 196271 (Q196271).

-- listing properties --
jdbc.url=jdbc:mysql://192.168.1.211:3306/chart...
jdbc.username=root
jdbc.password=123
jdbc.driverClassName=com.mysql.jdbc.Driver
chinahrt.url=jdbc:mysql://192.168.1.211:3306/china...
15:50:12 [ERROR] com.zyn.hibernate.test.JdbcManager.getObjectListBySQL(391)
	无法获得数据库连接!

java.lang.RuntimeException: 无法获得数据库连接!
	at com.zyn.hibernate.test.DataSourceHelperH

 网上搜索后得知,可以调大数据库的最大连接数来解决该问题,但问题是我没有数据库所在linux服务器的账号和密码,用jdbc操作,也不可能使用hibernate的连接池来解决该问题,自己再写个连接池貌似也划不来,只能采用比较耗时的操作,在进行没次update操作的代码中间加了个 

try{
				Thread.sleep(500);
			}catch(Exception e){
				e.printStackTrace();
			}

 

来解决问题。幸好数据量不是太多,这点时间还忍受的了。

1
2
分享到:
评论
4 楼 ghl0903 2016-11-14  
求分享 工具类的代码 ghl_0903@126.com

谢谢
3 楼 baijian_8d 2012-05-20  
问题不在于连接正常关闭。

在于:web应用 服务器 本地连接端口快速达到5000端口的上限

192.168.1.100 是mysql 服务器 端口 3306

192.168.1.110 是web服务器,在快速创建大量connection的同时,连接端口数快速上升,直到4999

错误提示也说的很清楚,提示你看文章Microsoft Knowledge Base Article 196271

[System Process]:0 TCP 192.168.1.110:4966 192.168.1.100:3306 TIME_WAIT
[System Process]:0 TCP 192.168.1.110:4968 192.168.1.100:3306 TIME_WAIT
[System Process]:0 TCP 192.168.1.110:4970 192.168.1.100:3306 TIME_WAIT
[System Process]:0 TCP 192.168.1.110:4972 192.168.1.100:3306 TIME_WAIT
[System Process]:0 TCP 192.168.1.110:4974 192.168.1.100:3306 TIME_WAIT
[System Process]:0 TCP 192.168.1.110:4976 192.168.1.100:3306 TIME_WAIT
[System Process]:0 TCP 192.168.1.110:4978 192.168.1.100:3306 TIME_WAIT
[System Process]:0 TCP 192.168.1.110:4980 192.168.1.100:3306 TIME_WAIT
[System Process]:0 TCP 192.168.1.110:4982 192.168.1.100:3306 TIME_WAIT
[System Process]:0 TCP 192.168.1.110:4984 192.168.1.100:3306 TIME_WAIT
[System Process]:0 TCP 192.168.1.110:4986 192.168.1.100:3306 TIME_WAIT
[System Process]:0 TCP 192.168.1.110:4988 192.168.1.100:3306 TIME_WAIT
[System Process]:0 TCP 192.168.1.110:4990 192.168.1.100:3306 TIME_WAIT
[System Process]:0 TCP 192.168.1.110:4992 192.168.1.100:3306 TIME_WAIT
[System Process]:0 TCP 192.168.1.110:4994 192.168.1.100:3306 TIME_WAIT
[System Process]:0 TCP 192.168.1.110:4996 192.168.1.100:3306 TIME_WAIT
2 楼 zyn010101 2012-04-16  
Loulley 写道
方法试过了,我发的是两万条,结果还是失败了,只能update到三千多条记录,悲剧呀

你可以把那个时间跳到1000或者更大试试。
1 楼 Loulley 2012-04-16  
方法试过了,我发的是两万条,结果还是失败了,只能update到三千多条记录,悲剧呀

相关推荐

Global site tag (gtag.js) - Google Analytics