DBconnection.java
/*****************************
* 数据库连接 bean ,用来连接 resin 的连接池
*****************************/
package zhl.database.mysql;import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
import javax.naming.Context;
import javax.naming.InitialContext;public class DBConnection {
private Connection conn = null;
private Statement stmt = null;
private ResultSet rs = null;
private int resultNum = 0; /**
* 构造函数
* 找到数据源,并用这个数据源创建连接
*/
public DBConnection() {
try {
Context env = new InitialContext();
DataSource pool = (DataSource) env.lookup("java:comp/env/jdbc/test");//其中java:comp/env/jdbc/是固定的,后面跟在resin或tomcat中配置的名字
if (pool == null)
throw new Exception("jdbc/test is an unknown DataSource");
conn = pool.getConnection();
stmt = conn.createStatement();
} catch (Exception e) {
System.out.println("naming:" + e.getMessage());
}
}
public Connection getConnection()
{
return conn;
} /**
* 执行SQL语句:查询记录
* @param sql SQL语句
* @return ResultSet 记录集
*/
public ResultSet executeQuery(String sql) {
rs = null;
try {
rs = stmt.executeQuery(sql);
} catch(SQLException se) {
System.out.println("Query error:" + se.getMessage());
}
return rs;
} /**
* 执行SQL语句 :插入与更新记录
* @param sql SQL语句
* @return int resultNum 更新的记录数
*/
public int executeUpdate(String sql) {
resultNum=0;
try {
resultNum = stmt.executeUpdate(sql);
} catch (SQLException se) {
System.err.println("Update error:" + se.getMessage());
}
return resultNum;
} /**
* 关闭连接
*/
public void close() {
System.out.println("aaa");
if(null!=rs){
try{
rs.close(); //关闭结果集
}catch(SQLException se){
System.out.println("close error: " + se.getMessage());
}
}
if(null!= stmt){
try{
stmt.close(); //关闭SQL语句对象
}catch(SQLException se){
System.out.println("close error: " + se.getMessage());
}
}
if(null!=conn){
try{
System.out.println("bbbbbb");
if(!conn.isClosed()){
System.out.println("ccccccc");
conn.close(); //关闭数据库
}
}catch(SQLException se){
System.out.println("close error: " + se.getMessage());
// application.log()//是写到日志
}
}
}
}
我在tomcat控制台看到每刷新一次页面就输出
aaa
bbbbbb
ccccccc
证明close()已经正常执行了。
五次后连接池满了(测试目的只设成5,在tomcat5的server.xml中设置)
用resin页做了测试,一样是刷新5次就不能访问了。
以上连接池的问题是第一个问题,还有。我的分页,无论显示的试哪一页,
都显示线两条数据。 rs.absolute((intPage-1) * intPageSize + 1);这行上面我加了输出显示从第几条开始,是正确的,而且rs.absolute((intPage-1) * intPageSize + 1);这句应该也是正常执行了。不知怎么没有效果。
我的环境是tomcat5.0.25+jdk1.4应该是支持这个语句的,而且也没有出错啊。以上两个问题,我弄了一个双休日。高手帮我看看。
解决方案 »
- 高分求类似struts 自己写的框架**********(具体信息看内容)
- 关于Struts标签中的div
- 讨论:JSP 通过URL传递汉字,为奇数个,最后一个为乱码?为偶数个,则正常显示?
- 高分请教:怎么样将http页面数据直接提交给javabean呢?
- tomcat运行时出现警告和error
- php数据类型如何转为java数据类型
- 类百度搜索热词功能,遇到的问题... 求大神解答
- 如何把数据循环插入数据库,如下
- 请教Enumeration的用法!给分~
- 你们教教我好吗?我都迷茫了...........——我的自白
- tomcat下的这页[http://127.0.0.1:8080/manager/status]的弹出对话框如何制作。
- 新手请教,在线等
stmt=null;
conn=null;
<jsp:useBean id="filelistbean" scope="page" class="zhl.database.mysql.DBConnection" />
从上面可以看出,每次当有页面请求时都进行了数据库的连接
bdsc() 删除还怎么用连接池类啊
shuqianlz(大个) 这段代码在/* */中间使注销的,你没看仔细吧。
//----------------------------------------------------------
Context initCtx = new InitialContext();
Context ctx = (Context) initCtx.lookup("java:comp/env");
ds = (DataSource) ctx.lookup("jdbc/Test");
initCtx.close();
//此时,你就可以用return ds.getConnection();来返回连接
<jsp:useBean id="filelistbean" scope="page" class="zhl.database.mysql.DBConnection" />去掉么????去掉了怎么编译?怎么使用???
我来答一下啦,
你在程序里根本就没用到这你定义的bean,你是直接用的全名.
这是你写的哦:
zhl.database.mysql.DBConnection Conn = new zhl.database.mysql.DBConnection();//生成连接池对象
<jsp:useBean id="filelistbean" scope="page" class="zhl.database.mysql.DBConnection" />
上面的代码已经生成了一个DBConnection对象,
在你的DBConnection的构造器中已经从连接池获取了
一个对象,但是在你的jsp中并没有调用filelistbean.close();也就是说在整个过程中并没有把获取的连接归还给
pool,有借无还,pool有再多的连接也总会有用完的时候呀。
另外分页每页都一样是怎么回事
第一页
>> 首 页 下一页 尾 页 页次:1/3页, 5条 2条/页
1
tom - 【1】
jack - 【2】
执行时间 (毫秒): 1222 第二页
>> 首 页 下一页 尾 页 页次:1/3页, 5条 2条/页
3
tom - 【1】
jack - 【2】
执行时间 (毫秒): 1222
第三页
>> 首 页 上一页 尾 页 页次:3/3页, 5条 2条/页
5
tom - 【1】
jack - 【2】
执行时间 (毫秒): 210 我共有五条数据,每一页都显示头两条,为什么后面三条看不到呢,如果我每页显示5条,则
>> 首 页 尾 页 页次:1/1页, 5条 5条/页
1
tom - 【1】
jack - 【2】
mary - 【3】
lisa - 【4】
me - 【5】
执行时间 (毫秒): 60
也就是说分页时rs.absolute((intPage-1) * intPageSize + 1);这句没起到作用。
不知我想的对不对。可是为什么不出错呢?
还有上面bean的问题。
贴子+10分先。
还有使用bean的方法能解释一下吗?