日期:2014-05-17  浏览次数:20723 次

一段代码.高人来帮忙看看有没有问题?
JSP+JAVABEAN连接数据库.每隔一段时间就打不开网页了.需要重启TOCMAT才行.请高人帮我看看,程序有没有问题?
数据源JAVABEAN:
第一个DBConnSource.java
/*
 * 数据源连接BEAN
 */
package mybean;

import java.sql.*;
import javax.sql.*;
import javax.naming.*;

public class DBConnSource {
  private Connection conn;
  private Statement stmt;
  private PreparedStatement pstmt;
  public DBConnSource(String dsName){
  try{
  Context initCtx = new InitialContext();
  Context ctx =(Context)initCtx.lookup("java:comp/env");
  DataSource ds =(DataSource)ctx.lookup(dsName);
  conn = ds.getConnection();
  }
  catch(Exception e)
  {
  System.out.print(e.toString());
  }
  }
  public synchronized Statement getStmt()throws Exception
  {
  stmt=conn.createStatement();
  return stmt;
  }
  public synchronized PreparedStatement getPstmt(String sql)throws Exception
  {
  pstmt=conn.prepareStatement(sql);
  return pstmt;
  }
  public void DBclose(){
  try{
  conn.close(); :重点是这里.这个conn.close 到底有没有被执行到.
  }catch(Exception e){
  System.out.print(e.toString());
  }
  }
}

第二个TitleList.java
/*
 * 显示帖子列表只显示前10条.
 * 使用数据源连接.
 * 
 */
package mybean;

import java.sql.*;

import mybean.DBConnSource;

public class TitleList {

private String tableName="";
  private Statement stmt;
   
  public TitleList(){}
   
  public void setTableName(String n){
  this.tableName=n;
  }
   
  public StringBuffer getBuffer(){
  StringBuffer buffer=new StringBuffer();
  try{
  DBConnSource dbc=new DBConnSource("jdbc/myweb"); 
  stmt=dbc.getStmt(); 
  }catch(Exception e){
  System.out.print("不能连接到数据源"+e.toString());
  }
   
  try{
  String strSql="SELECT * FROM "+tableName+" ORDER BY id DESC LIMIT 10"; 
  ResultSet rs = stmt.executeQuery(strSql);
   
  rs.first();
  do{
  String title=rs.getString("title");
  buffer.append("<a href='cont.jsp?nid="+rs.getInt("id")+"' target=_blank>"+title+"</a></BR>");  
  }while(rs.next());
  rs.close();
  stmt.close();
  }
  catch(SQLException e){
  System.out.print("数据连接错误."+e.toString());
  }
  return buffer;
  }
}

这两段代码.就是定义一个连接数据库的JAVABEAN,然后在每个需要使用动态数据的JAVABEAN里调用这个JAVABEAN.
象上述写法.那个conn.close(),有没有被执行到.
另外我的TOMCAT每隔一段时间就需要重启一下.还可能是什么原因?
谢谢
只有20分了.希望大家多多帮忙.

------解决方案--------------------
你这样参考着做,我说个思路:

DBConnSource.java中,DBclose这个方法不要。

在StyleList.java中,来关闭这些资源。

 finally{
if(rs != null){
rs.close();
}

if(stmt != null){
stmt.close();
}

if(dbc.getCon