一段代码.高人来帮忙看看有没有问题?
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.getConn != null){
conn.close();
}
}
}