如果把下面的语句注释掉//定义连接池对象为静态变量,将一直存在,直到工作目录关闭。
//private static DataSource ds = null;则在程序里面每次调用
DBprocess dbp = new DBprocess();
都要执行一次lookup操作是不是很浪费资源?另外我还想当调用dbp.close();时
这个对象所占资源就能被JVM回收!
//private static DataSource ds = null;则在程序里面每次调用
DBprocess dbp = new DBprocess();
都要执行一次lookup操作是不是很浪费资源?另外我还想当调用dbp.close();时
这个对象所占资源就能被JVM回收!
解决方案 »
- 关于Transaction性能的问题
- 新手求助
- apache和tomcat+jdk windows
- 目前项目中碰到一个问题,如何根据选种的某一状态,加载不同的页面,这个页面是没有(有可能是放在数据库中一个字段一个字段的,还没定下来),望各位给小弟指个思路
- 如何制作联动下拉式选单?
- 求教:Connection reset by peer: socket write error,怎么解决?
- 一个关于Struts Action的小框架, 请高手指点一下
- 请问随机生成6位数该怎么实现?
- 让程序停止一会,在运行
- 调用第三方支付接口时隐藏第三方支付的地址,使得看起来像直接从商城调转到银行支付页面
- 寻求一段查询分页显示的代码!
- 请教Jsp中操作数据库出现的问题.
DbWrapper.java用于lookup数据源 并返回一个连接!只实例化了一次,ds也只有一个对象!减少了lookup系统消耗!
DBProcess.java是现在数据库操作的封装DbWrapper.java
package com.util;import java.sql.*;
import java.util.*;
import javax.naming.*;
import javax.sql.*;public class DbWrapper {
private static DbWrapper instance; // 唯一实例
private static DataSource ds = null; // 定义连接池对象为静态变量,将一直存在,直到工作目录关闭。 /**
* 返回唯一实例.如果是第一次调用此方法,则创建实例
* @return DbWrapper 唯一实例
*/
static synchronized public DbWrapper getInstance() {
if (instance == null) {
instance = new DbWrapper();
}
return instance;
} //构建函数私有,防止其它对其初始化
private DbWrapper() {
} public static Connection openConnection() throws Exception {
try {
// 只需要初始化1次
if (ds == null) {
Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:/comp/env");
DataSource ds = (DataSource) envContext.lookup("jdbc/MyDataSource");
}
}
catch (Exception e) {
e.printStackTrace();
}
return ds.getConnection();
}
}-----------------------------------------------------
DBProcess.javapackage com.util;import java.sql.*;
import javax.naming.*;
import javax.sql.*;
import com.hdonline.hdmis.util.DbWrapper;public class DBProcess { private Connection conn = null;
private Statement stmt = null;
private ResultSet rs = null; /*
*constructor
*/
public DBProcess() {
init();
} private void init() {
try {
conn = DbWrapper.getInstance().openConnection();
}
catch (Exception e) {
e.printStackTrace();
}
} /*
* get a connection method
* @return
*/
public Connection getConnection() {
return this.conn;
} /*
* close connection and resultset and statement
*/
public void close(String poolName) {
try {
if (rs != null) {
rs.close();
rs = null;
}
if (stmt != null) {
stmt.close();
stmt = null;
}
if (conn != null) {
conn.close();
conn = null;
}
}
catch (SQLException sqle) {
System.err.println("数据执行操作 在执行关闭操作时出错!");
sqle.printStackTrace();
}
} public void close() {
try {
if (rs != null) {
rs.close();
rs = null;
}
if (stmt != null) {
stmt.close();
stmt = null;
}
if (conn != null) {
conn.close();
conn = null;
}
}
catch (SQLException sqle) {
System.err.println("数据执行操作 在执行关闭操作时出错!");
sqle.printStackTrace();
}
} /**
* query
*/
public ResultSet execQuery(String sql) {
// get a stmt
try {
stmt = conn.createStatement();
}
catch (SQLException ex1) {
if (conn == null) {
System.out.print("空的连接!!!");
}
else {
System.out.print("关闭的连接!!!");
}
ex1.printStackTrace();
} //get the resultset
try {
rs = stmt.executeQuery(sql);
}
catch (SQLException ex) {
System.err.println("数据执行操作 在执行下列sql语句时产生错误 " + "SQL:" + sql);
ex.printStackTrace();
}
catch (java.lang.Exception ex) {
ex.printStackTrace();
}
return rs;
} /**
* update
*/
public int execUpdate(String sql) throws SQLException { int count = 0;
// get a stmt
try {
stmt = conn.createStatement();
}
catch (SQLException ex1) {
}
// update
try {
count = stmt.executeUpdate(sql);
}
catch (SQLException ex) {
System.err.println("数据执行操作 在执行下列sql语句时产生错误 " + "SQL:" + sql);
ex.printStackTrace();
}
catch (java.lang.Exception ex) {
ex.printStackTrace();
} try {
conn.commit();
}
catch (SQLException ex2) {
} return count;
} /*
* update without commit
*/
public int execUpdateNoCommit(String sql) throws SQLException { int count = 0;
// get a stmt
try {
stmt = conn.createStatement();
}
catch (SQLException ex1) {
}
// update
try {
count = stmt.executeUpdate(sql);
}
catch (SQLException ex) {
System.err.println("数据执行操作 在执行下列sql语句时产生错误 " + "SQL:" + sql);
ex.printStackTrace();
}
catch (java.lang.Exception ex) {
ex.printStackTrace();
} return count;
} public void commit() {
try {
conn.commit();
}
catch (SQLException ex2) {
}
}
public void Autocommitfalse() throws SQLException { ///开始事务
conn.setAutoCommit(false);
} public void rollback() throws SQLException { ///出错市回滚
conn.rollback();
}
}