连接池技术-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;

}
}

时间: 2024-10-13 23:47:57

连接池技术-BaseDao写法的相关文章

JDBC连接池技术

一.连接池技术 (1)Java语言通过JDBC技术访问数据库的基本过程是: 1.加载数据库驱动程序: 2.通过JDBC建立数据库连接: 3.访问数据库,执行SQL语句: 4.断开数据库连接. (2)在Web应用程序开发中,使用这种模式访问数据库时,存在很多问题,为了解决这些问题,可以采用数据库连接池技术. 连接池实际上是在一个集合对象中存储一定数量的数据库连接对象.当程序需要使用数据库连接时,请求从池中获取一个空闲的连接, 程序使用完毕后再把连接放回池中重用.连接池通过重用连接的方法,减少了创建

连接池技术解密,连接池对我们不再陌生

一.为什么我们要用连接池技术? 前面的数据库连接的建立及关闭资源的方法有些缺陷.统舱传统数据库访问方式:一次数据库访问对应一个物理连接,每次操作数据库都要打开.关闭该物理连接, 系统性能严重受损. 解决方案:数据库连接池(Connection Pool).系统初始运行时,主动建立足够的连接,组成一个池.每次应用应用程序请求数据库连接时,无需重新打开连接,而是从池中取出已有的连接,使用完后,不再关闭,而是归还. 二.连接池主要由三部分组成:连接池的建立.连接池中连接的使用管理.连接池的关闭. 三.

连接池技术 Connection Pooling

原创地址:http://www.cnblogs.com/jfzhu/p/3705703.html 转载请注明出处 和数据库建立一个物理连接是一个很耗时的任务,所以无论是ADO.NET还是J2EE都提供了一个连接池的技术. 一个池其实就是一个列表.在ADO.NET中,有一个Connection Manager,它对每一个connection string都管理着一个可用连接的列表,这个列表就是Connection Pool. 当第一次数据库连接被初始化时,connection manager会创建

实现连接池技术的样例

1. 在tomcat的安装文件夹下conf文件夹下的context.xml文件加入例如以下代码: <Resource name="jdbc/course" auth="Container" //这个name是非常关键的.由于web.xml文件里也须要用到,在jsp中连接数据源也须要用到. type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver"

【JDBC】使用连接池技术访问oracle

使用连接池访问数据库之前需要导入相关的jar包, 首先需要导入Oracle的驱动包,一般在安装Oracle数据库的目录下就有,读者的目录下就有一个ojdbc6.jar的驱动包. 然后再需要导入和连接池相关的jar包,比如:commons-dbcp-1.4.jar,和commons-pool-1.5.6.jar包. 下面是一个使用连接池包装好的工具包: driverClassName=oracle.jdbc.OracleDriver url=jdbc:oracle:thin:@localhost:

Java的连接池技术

如何使用JNDI(Java Naming and Directory Interface)是一个应用程序接口,为开发人员提供了查找和访问各种命名和目录服务的通用,统一的接口,类似JDBC都是构建在抽象层上.JNDI提供了一种统一的方式,可以用在网络上查找和访问服务.通过指定一个资源名称,该名称对应于数据库或命名服务中的一个一个记录,同时返回数据库连接建立所必需的信息. 在实际开发中,我们有时候还会使用服务器提供给我们的数据库连接池,比如我们希望Tomcat服务器在启动的时候可以帮助我们创建一个数

jdbc操作数据库(使用连接池技术)查询封装结果

连接池(DataSource) 目的是为了节省创建连接和销毁连接所需要花费的时间 提高程序的执行效率 DruidDataSource 创建连接池对象 1: DruidDataSource d = new DruidDataSource(); d.setDriverClassName(); d.setUrl() d.setUserName() d.setPassword() 2:    准备一个db.properties Properties p = new Properties(); p.loa

25、连接池(DBCP、C3P0)、动态代理与分页技术

连接池 思考: 程序中连接如何管理? 1. 连接资源宝贵:需要对连接管理 2. 连接: a) 操作数据库,创建连接 b) 操作结束, 关闭! 分析: 涉及频繁的连接的打开.关闭,影响程序的运行效率! 连接管理: 预先创建一组连接,有的时候每次取出一个: 用完后,放回: 学习连接池: a. 自定义一个连接池 b. 学习优秀的连接池组件 a) DBCP b) C3P0 动态代理 Java提供了一个Proxy类,调用它的newInstance方法可以生成某个对象的代理对象,使用该方法生成代理对象时,需

11、hibernate查询、连接池、二级缓存

Hibernate第三天: 1. 对象状态 2. session缓存 3. lazy懒加载 4. 映射 一对一对映射 组件/继承映射 目标: 一.hibernate查询 二.hibernate对连接池的支持 三.二级缓存 四.Hibernate与Struts小案例(项目中session的管理方式) 一.hibernate查询 查询概述 1)Get/load主键查询 2)对象导航查询 3)HQL查询, Hibernate Query language hibernate 提供的面向对象的查询语言.