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

求一个经典的数据库封装类!在使用连接池的情况下,你们的数据库封装类都是怎么写的?
求一个经典的数据库封装类!

在使用连接池的情况下,你们的数据库封装类都是怎么写的?


求一个稳定的

我现在用的不是很稳定。

邮箱:yuyangwxj@163.com

谢谢了!
------解决方案--------------------
package util;

//mysqltest.java
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

import com.chinaMobile.model.Customer;

public final class Mysqltest {
protected static Mysqltest inst = null;
private static final String _url = "proxool.xml-pdjc"; // proxool SourceName
// nickName
// 第0处修改去掉一些的成员变量
// Connection conn = null;
// Statement stmt = null;
// PreparedStatement pstmt = null;
// ResultSet rs = null;
private ThreadLocal<Connection> connLocal = new ThreadLocal<Connection>();

// mysqltest
/**
 * 第①处修改 public变成private 不允许外部new mysqltest();单例模式必须的
 */
private Mysqltest() {
// inst.getConnection();
}

/**
 * 第②处修改,外部调用必须要通过这个得到对象,要不然不能new 怎么出来对象呢
 * 
 */

public Mysqltest getMysqltest() {
if (null == inst) {
inst = new Mysqltest();
}
return inst;

}

/**
 * 第③处修改加上ThreadLocal管理conn,
 * 并且conn不能自动提交,因为这里是最原子的地方,所以我们要在上层方法中来做事务,所以conn.setAutoCommit(false);
 * 如果可以加上异常捕获在抛出一个自定义的runtime异常,这样可以在上层对异常进行处理了 参考
 * public class DatabaseException extends RuntimeException {
 * 
 * private Exception nestedException;
 * 
 * public Exception getNestedException() { return nestedException; }
 * 
 * public DatabaseException(Exception e, String msg) { super(msg);
 * nestedException = e; }
 * 
 * }
 * 
 * @return
 * @throws SQLException
 */
// getConn
public Connection getConnection() throws DatabaseException {
Connection conn = connLocal.get();
if (conn == null) {
try {
if (conn == null 
------解决方案--------------------
 conn.isClosed()) {
conn = DriverManager.getConnection(_url);
conn.setAutoCommit(false);//这里的事务不能自动提交
// 放到ThreadLocal里面的对象,可见性仅限于当前线程
connLocal.set(conn);
System.out.println("获得数据库 #" + conn.hashCode());
}
} catch (SQLException e) {
e.printStackTrace();
throw new DatabaseException(e, "不能获得数据库连接");
}
}

return conn;
}

// pstmt conn
/**
 * 第④处 如果sql有参数怎么办,所以修改一下,加上 Object[] params
 * 这里可以不错异常处理,因为我们还不关心这里是否出现了异常,不过管了也不错但是管了就必须抛出自定义的异常,要不然上层程序怎么知道出现异常了呢
 *&