连接池技术-BaseDao写法

Posted 盛夏光年2017

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了连接池技术-BaseDao写法相关的知识,希望对你有一定的参考价值。

package cn.bdqn.basedao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

/**
* Dao层的公共属性和方法
*/
public class BaseDao {
// 公共的属性
protected Connection connection = null;
protected PreparedStatement ps = null;
protected ResultSet rs = null;

// 连接数据库的四要素
/*
* protected String url = ConfigManage.getInstance().getValues("url");
* protected String user = ConfigManage.getInstance().getValues("user");
* protected String password = ConfigManage.getInstance()
* .getValues("password"); protected String driverClass =
* ConfigManage.getInstance().getValues( "driverClass");
*/

/*
* 连接数据库
*/
public boolean getConnection() {

try {
// 初始化上下文对象
Context context = new InitialContext();
DataSource source = (DataSource) context
.lookup("java:comp/env/jdbc/news");
connection = source.getConnection();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
return true;

}

/*
* 关闭资源
*/
public void closeConnection() {
try {
if (rs != null) {
rs.close();
}
if (ps != null) {
ps.close();
}
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}

/*
* 增删改
*/
public int executeUpdate(String sql, Object... params) {
int row = 0;// 影响的行数
if (getConnection()) {
try {
ps = connection.prepareStatement(sql);
if (params != null) {
// 遍历数组
for (int i = 0; i < params.length; i++) {
ps.setObject(i + 1, params[i]);
}
}
// 没有参数的情况
row = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭资源
closeConnection();
}
}
return row;
}

/*
* 查询
*/
public ResultSet executeQuery(String sql, Object... params) {
// 先做是否获取到连接的判断
if (getConnection()) {
try {
ps = connection.prepareStatement(sql);// 执行sql
if (params != null) {
for (int i = 0; i < params.length; i++) {
ps.setObject((i + 1), params[i]);// 拿到参数
}
}
rs = ps.executeQuery();// 没有带参数的
} catch (SQLException e) {

e.printStackTrace();
}// 这里就不关资源了,因为关了的话,实现类进行后续操作,就会拿不到连接,把关闭连接放在实现类中
}
return rs;

}
}

以上是关于连接池技术-BaseDao写法的主要内容,如果未能解决你的问题,请参考以下文章

druid(德鲁伊)连接池的DataSourceUtils的写法及原生写法

JNDI和分层模式

连接池技术的连接池的建立

JAVA连接池技术

JDBC(连接池) -- 02(II)

谈谈连接池线程池技术原理