spring+hibernate做查询时多次调用提示地址被占用的错误是什么原因?

丞相 2005-10-10 01:43:14
我采用了spring+hibernate进行数据查询时,如果让连接多次查询(几千次),就报以下错误
org.springframework.jdbc.UncategorizedSQLException: (Hibernate operation): encountered SQLException [Network error IOException: Address already in use: connect]; nested exception is java.sql.SQLException: Network error IOException: Address already in use: connect
java.sql.SQLException: Network error IOException: Address already in use: connect
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:372)
at net.sourceforge.jtds.jdbc.ConnectionJDBC3.<init>(ConnectionJDBC3.java:50)
at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:183)
at java.sql.DriverManager.getConnection(DriverManager.java:512)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:156)
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:144)
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:132)
at org.springframework.orm.hibernate.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:59)
at net.sf.hibernate.impl.BatcherImpl.openConnection(BatcherImpl.java:278)
at net.sf.hibernate.impl.SessionImpl.connect(SessionImpl.java:3264)
at net.sf.hibernate.impl.SessionImpl.connection(SessionImpl.java:3244)
at net.sf.hibernate.impl.BatcherImpl.prepareQueryStatement(BatcherImpl.java:65)
at net.sf.hibernate.loader.Loader.prepareQueryStatement(Loader.java:704)
at net.sf.hibernate.loader.Loader.doQuery(Loader.java:185)
at net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:133)

at net.sf.hibernate.loader.Loader.doList(Loader.java:950)
at net.sf.hibernate.loader.Loader.list(Loader.java:941)
at net.sf.hibernate.hql.QueryTranslator.list(QueryTranslator.java:834)
at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1512)
at net.sf.hibernate.impl.QueryImpl.list(QueryImpl.java:39)
at org.springframework.orm.hibernate.HibernateTemplate$23.doInHibernate
HibernateTemplate.java:501)

at org.springframework.orm.hibernate.HibernateTemplate.execute
HibernateTemplate.java:243)
at org.springframework.orm.hibernate.HibernateTemplate.executeFind(HibernateTemplate.java:263)
at org.springframework.orm.hibernate.HibernateTemplate.find(HibernateTemplate.java:498)
at com.gbc.stgp.dao.hibernate.ChannelInfoDAOHibernate.getChannelInfos(ChannelInfoDAOHibernate.java:90)
at com.gbc.stgp.dao.hibernate.ChannelInfoDAOHibernate.getChannelFolderInfos(ChannelInfoDAOHibernate.java:98)
at com.gbc.stgp.service.impl.ChannelInfoManagerImpl.getChannelFolderInfos(ChannelInfoManagerImpl.java:111)
at _test__jsp._jspService(_test__jsp.java:32)
at com.caucho.jsp.JavaPage.service(JavaPage.java:75)
at com.caucho.jsp.Page.subservice(Page.java:506)
at com.caucho.server.http.FilterChainPage.doFilter(FilterChainPage.java:182)
at com.caucho.server.http.Invocation.service(Invocation.java:315)
at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:246)
at com.caucho.server.http.HttpRequest.handleConnection(HttpRequest.java:163)
at com.caucho.server.TcpConnection.run(TcpConnection.java:139)
at java.lang.Thread.run(Thread.java:534)
Caused by: java.net.BindException: Address already in use: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158)
at java.net.Socket.connect(Socket.java:452)
at sun.reflect.GeneratedMethodAccessor31.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at net.sourceforge.jtds.jdbc.SharedSocket.<init>(SharedSocket.java:274)
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:301)

... 37 more
我用测试程序连接调用的方法代码是
public int channelResInfoNums(String channelid) {
int totalCount = 0;
Query query = null;
String sql = null;
Session s = this.getSession();
try {
sql = "SELECT count(a.id) FROM UserInfo AS a WHERE a.code='101'";
query = getHibernateTemplate().createQuery(s, sql);
totalCount = ( (Integer) query.iterate().next()).intValue();

}
catch (Exception ex) {
totalCount=0;
}
finally {
closeSessionIfNecessary(s);
}
return totalCount;
}
...全文
149 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
丞相 2005-10-11
  • 打赏
  • 举报
回复
我换了多种连接池,试了c3p0,dbcp调了连接池的数量, 不起作用,连接到1800次左右时就报以上错误,不知是什么设置得不对?
sgdb 2005-10-10
  • 打赏
  • 举报
回复
增加连接池的并发数量

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧