1.DBCP数据源,
利用该数据源需要依赖Commons-pool连接池,即要用到commons-pool.jar
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destory-method="close">
<property name="driverClassName"><value>oracle.jdbc.driver.OracleDriver</value></property>
<property name="url">
<value>jdbc:oracle:thin:@192.168.10.121:1521:HiFinance</value>
</property>
<property name="username"><value>scott</value></property>
<property name="password"><value>tiger</value></property>
BasicDataSource提供了close()方法关闭数据源,必须设定destory-method="close“属性
一些常用的属性:
1)defaultAutoCommit:设置从数据源中返回的连接是否采用自动提交机制,默认是FALSE
2)defaultReadOnly:设置数据源是否仅能执行只读操作,默认为false;
3)maxActive:最大连接数据库连接数,0表示无限制
4)maxIdle:最大等待连接中的数量,0表示无限制
5)maxWait:最大等待秒数,单位是毫秒,超出时间会报出错误信息
6)validationQuery:用于验证连接是否成功查询SQL语句,Sql语句必须至少要返回一行数据,如:
可以简单的设置为:select count(*)from user;
7)removeAbandoned:是否自我中断,默认FALSE
2.JNDI数据源
spring专门提供引用JNDI资源的JndiObjectFactoryBean类,如:
<bean id="dataSource" class="org.springfrmework.jndi.JndiObjectFactory">
<property name="jndiName" value="java:comp/env/jdbc/bbt"/>//名字jdbc/bbt
</bean>
使用jee命名空间:<jee:jndi-lookup id="dataSource " jndi-name="java:comp/env/jdbc/bbt"/>
写获取数据库工具类
package com.lavasoft.dbtest;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.CallableStatement;
/**
* Created by IntelliJ IDEA.
* File: DBUtil.java
* User: leizhimin
* Date: 2008-2-21 14:26:30
* 数据库工具
*/
public final class DBUtil {
private static final Log log = LogFactory.getLog(DBUtil.class);
/**
* 获取系统的数据源
*
* @return DataSource
*/
public static DataSource getDataSource() {
DataSource dataSource = null;
try {
dataSource = (DataSource) ContextHelper.getContext().getBean("rptds");
} catch (Exception e) {
log.error("获取数据源出错,请检查Spring数据源配置!");
}
return dataSource;
}
/**
* 获取数据库连接
*
* @return Connection
*/
public static Connection makeConnection() {
Connection conn = null;
try {
conn = getDataSource().getConnection();
} catch (SQLException e) {
log.error("通过数据源获取数据库连接发生异常!");
e.printStackTrace();
}
return conn;
}
/**
* 执行没有参数的SQL过程
*
* @param procedureName 存储过程名字
* @return boolean 返回存储过程执行的结果,true表示执行成功,false表示执行失败.
*/
public static boolean executeBSDProcedure(String procedureName) {
boolean flag = false;
String sqlStr = "{call " + procedureName + "()}";
CallableStatement cs;
Connection conn = makeConnection();
try {
cs = (CallableStatement) conn.prepareStatement(sqlStr);
cs.executeUpdate(sqlStr);
flag = true;
} catch (SQLException e) {
log.error("调用存储过程" + sqlStr + "失败!");
e.printStackTrace();
}
return flag;
}
}
/**
* Created by IntelliJ IDEA.<br>
* <b>User</b>: leizhimin<br>
* <b>Date</b>: 2008-4-22 13:53:56<br>
* <b>Note</b>: 基类DAO,提供了数据源注入
*/
public class BaseDAO {
private DataSource dataSource;
public DataSource getDataSource() {
return dataSource;
}
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
public Connection getConnection() {
Connection conn = null;
try {
conn = dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
}