单例模式的数据库连接类
public class DataBaseUtils {
private static final Logger log = Logger.getLogger(DataBaseUtils.class.getName());
private static BasicDataSource dataSource = null;
static{
dataSource = new BasicDataSource();
Properties dataBase = Contants.dataBase;//Tomcat启动时,在servlet中已经初始化
dataSource.setDriverClassName(dataBase.getProperty("dataBase_driver"));
dataSource.setUrl(dataBase.getProperty("dataBase_url"));
dataSource.setUsername(dataBase.getProperty("dataBase_user"));
dataSource.setPassword(dataBase.getProperty("dataBase_password"));
dataSource.setInitialSize(Integer.parseInt(dataBase.getProperty("dataBase_initialSize").trim()));
dataSource.setMaxIdle(Integer.parseInt(dataBase.getProperty("dataBase_maxIdle").trim()));
dataSource.setMinIdle(Integer.parseInt(dataBase.getProperty("dataBase_minIdle")));
dataSource.setMaxWaitMillis(Long.valueOf((dataBase.getProperty("dataBase_maxWait").trim())));
}
//私有的构造方法
private DataBaseUtils(){
}
//内部类实现单例模式
private static class DBUtilsHolder{
private static DataBaseUtils dbUtils = new DataBaseUtils();
}
/**
*
* 获取连接数据库类的实例
* @date 2014年3月11日
*/
public static DataBaseUtils getInstance(){
return DBUtilsHolder.dbUtils;
}
/**
*
* 连接数据库方法
* @date 2014年3月11日
*/
public Connection getConn(){
Connection connection = null;
try {
connection = dataSource.getConnection();
} catch (SQLException e) {
log.error("数据库连接异常," + e.getMessage());
throw new DataBaseException("获取数据库连接异常" + e.getMessage());
}
return connection;
private static final Logger log = Logger.getLogger(DataBaseUtils.class.getName());
private static BasicDataSource dataSource = null;
static{
dataSource = new BasicDataSource();
Properties dataBase = Contants.dataBase;//Tomcat启动时,在servlet中已经初始化
dataSource.setDriverClassName(dataBase.getProperty("dataBase_driver"));
dataSource.setUrl(dataBase.getProperty("dataBase_url"));
dataSource.setUsername(dataBase.getProperty("dataBase_user"));
dataSource.setPassword(dataBase.getProperty("dataBase_password"));
dataSource.setInitialSize(Integer.parseInt(dataBase.getProperty("dataBase_initialSize").trim()));
dataSource.setMaxIdle(Integer.parseInt(dataBase.getProperty("dataBase_maxIdle").trim()));
dataSource.setMinIdle(Integer.parseInt(dataBase.getProperty("dataBase_minIdle")));
dataSource.setMaxWaitMillis(Long.valueOf((dataBase.getProperty("dataBase_maxWait").trim())));
}
//私有的构造方法
private DataBaseUtils(){
}
//内部类实现单例模式
private static class DBUtilsHolder{
private static DataBaseUtils dbUtils = new DataBaseUtils();
}
/**
*
* 获取连接数据库类的实例
* @date 2014年3月11日
*/
public static DataBaseUtils getInstance(){
return DBUtilsHolder.dbUtils;
}
/**
*
* 连接数据库方法
* @date 2014年3月11日
*/
public Connection getConn(){
Connection connection = null;
try {
connection = dataSource.getConnection();
} catch (SQLException e) {
log.error("数据库连接异常," + e.getMessage());
throw new DataBaseException("获取数据库连接异常" + e.getMessage());
}
return connection;
}
}
以上是我自己创建的连接数据库的类,大家看一下有啥缺陷,欢迎批判
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
static方法实现的,数据库连接失败了,导致类加载失败,这个不好吧?如果类里面还有其他方法,也没法使用了。。。 非static方法,调用时再分配内存、再去连接;如果有错误,不至于影响太大;如果不用了,还能销毁呢。 不是更好吗?
整个类就提供一个获取连接的public方法,为什么不写成static的,还要画蛇添足的写个单例获取一个实例。
另外想说一句,如果是自己写着玩的,无所谓,如果是工程上用的,请记住,地球上还有一个叫"连接池"的玩意。
连接池+1
回复
DBCP就是连接池呀
整个类就提供一个获取连接的public方法,为什么不写成static的,还要画蛇添足的写个单例获取一个实例。
整个类就提供一个获取连接的public方法,为什么不写成static的,还要画蛇添足的写个单例获取一个实例。
整个类就提供一个获取连接的public方法,为什么不写成static的,还要画蛇添足的写个单例获取一个实例。