jsp连接SQL2008超时,求各位大神指点!

zhangweifeng23 2012-09-18 11:10:59
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object
at org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:114)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
at uploadtest.ConnectionDB.getConnection(ConnectionDB.java:18)
at ado.productado.page_count(productado.java:152)
at webtier.ProductController.readproduct(ProductController.java:215)
at webtier.ProductController.doGet(ProductController.java:59)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
我的每个连接资源都有CLOSE(),报错指向java类,我用的是连接池,之前是在SQL2005开发,连接数据库没有问题!后面将数据库转换成2008就出现这个毛病了!
异常指向java类的方法:
public int page_count() throws NamingException, SQLException{
int count = 0;
int pages = 0;
try {
conn=ConnectionDB.getConnection();
String sql="select * from product";
Statement smt=null;
try {
smt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rs=smt.executeQuery(sql);
rs.last();
count=rs.getRow();
pages=count/12;
if(count%12>0){
pages=pages+1;
return pages;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return pages;
}
...全文
125 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangweifeng23 2012-09-18
  • 打赏
  • 举报
回复
没人啊!自己顶上!
zhangweifeng23 2012-09-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

我看你的代码里也没有smt.close(),conn.close()类似的代码啊。。
[/Quote]
额。。贴错了!这是我之前的代码!
菖蒲老先生 2012-09-18
  • 打赏
  • 举报
回复
我看你的代码里也没有smt.close(),conn.close()类似的代码啊。。
aa00aa00 2012-09-18
  • 打赏
  • 举报
回复
恩,那就好
zhangweifeng23 2012-09-18
  • 打赏
  • 举报
回复
不是我的驱动问题!我现在解决了。。我在我的数据库链接类加了一个关闭数据库链接的方法,在java类里面调用就可以了!我不知道这是什么原因!
ublic class ConnectionDB {
static private final String jndi="keyee";
static DataSource ds;

public static Connection getConnection() throws ClassNotFoundException, NamingException, SQLException{

Context initCtx=new javax.naming.InitialContext();
Context envCtx=(Context)initCtx.lookup("java:comp/env");

DataSource ds=(DataSource)envCtx.lookup(jndi);
Connection conn=ds.getConnection();
conn.setAutoCommit(false);
return conn;
}
public static void conclose(Connection conn){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
aa00aa00 2012-09-18
  • 打赏
  • 举报
回复
public static Connection getConnection() throws Exception
{
try
{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String url = "jdbc:sqlserver://190.160.10.64:1433;DatabaseName=website";
String user="sa";
String password = "123456";
return DriverManager.getConnection(url, user, password);
}
}
public static Statement getStatement()
{
try
{
return getConnection().createStatement();
}
}

//执行SQL语句
public static ResultSet ExecuteQuery(String sql)
{
try
{
return getStatement().executeQuery(sql);//使用创建的Statement 对象
}
}

在有就是你的数据库驱动,是不是有问题??
zhangweifeng23 2012-09-18
  • 打赏
  • 举报
回复
我现在已经加了关闭连接的代码啊!还是会报同样的错误啊!
aa00aa00 2012-09-18
  • 打赏
  • 举报
回复
就是说,你上面的代码,没有关闭连接,如果要打开数据库,必须关闭连接,释放资源conn.close();
zhangweifeng23 2012-09-18
  • 打赏
  • 举报
回复
四楼的朋友,我还是不是很懂啊!我是菜鸟,能说的详细一点啊!
aa00aa00 2012-09-18
  • 打赏
  • 举报
回复
真正原因是数据库连接没有及时关闭,导致数据连接池满了,无法再取得连接。

解决方法:每次调用数据库链接以后要关闭,如手工调用Hibernate的session.close(),直接使用JDBC则同样需要关闭,或是使用spring的事务处理!

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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