Spring 使用JDBC对数据库进行访问

来源:互联网 发布:淘宝客服服务理念 编辑:程序博客网 时间:2024/05/10 15:55

Spring提供的JDBC抽象框架.org.springframework.jdbc.datasource包里有一个用以简化数据源访问的工具类.它支持绑定线程的连接,比如被用于DataSourceTransactionManager.

 

(1):jdbc.properties 属性配置文件(因为是测试,所以这个文件包括下面的applicationContext.xml都放在classpath下)

jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:orcl
jdbc.username=scott
jdbc.password=tiger

 

(2): applicationContext.xml 配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
 <!-- 加载属性文件 -->
 <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="locations">
   <list>
    <!-- WEB-INFO <value>WEB-INF/jdbc.properties</value>-->
    <!-- Classpath --><value>classpath*:jdbc.properties</value>
   </list>
  </property>
 </bean>
 
 <!-- 数据源定义,使用Apache DBCP 连接池 -->
 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  <property name="driverClassName" value="${jdbc.driverClassName}"/>
  <property name="url" value="${jdbc.url}"/>
  <property name="username" value="${jdbc.username}"/>
  <property name="password" value="${jdbc.password}"/>
 </bean>
 
 <!-- 数据源定义,使用DriverManagerDataSource 连接 -->
   <bean id="dataSource2"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName">
            <value>${jdbc.driverClassName}</value>
        </property>
        <property name="url">
            <value>${jdbc.url}</value>
        </property>
        <property name="username">
            <value>${jdbc.username}</value>
        </property>
        <property name="password">
            <value>${jdbc.password}</value>
        </property>
    </bean>
</beans>

 

(3) 通过三种方式得到Connection

package cn.com.chenlly.db;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import org.apache.commons.dbcp.BasicDataSource;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

//不是web应用程序,这两个jdbc.properties,applicationContext.xml文件不是放在WEB-INFO 而是放在SRC classpath下面
public class DbTest {
 //配置文件所在的目录
 private final static String fileName="D://workspace//spingTest//src//jdbc.properties";
 //读取配置文件
 public static Properties readDBConfig() throws IOException{
  InputStream in = new BufferedInputStream(new FileInputStream(fileName));
   Properties p = new Properties();
   p.load(in);
   in.close();
   return p;
 }
 
 //Spring 上下文
 public static ApplicationContext getContext(){
  ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
  return context;
 }
 
 /*使用Spring的JDBC层,你可以从JNDI得到一个数据源,也可以通过使用Spring发行版提供的实现自己配置它。
    后者对于脱离Web容器的单元测试是十分便利的。
 我们将在本节中使用DriverManagerDataSource实现*/
 public  static Connection getConByDMDS(){
  Connection con = null;
  try {
   Properties p = DbTest.readDBConfig();
   String driverClassName = p.getProperty("jdbc.driverClassName");
   String url = p.getProperty("jdbc.url");
   String username = p.getProperty("jdbc.username");
   String password = p.getProperty("jdbc.password");
   DriverManagerDataSource dataSource = new DriverManagerDataSource();
   dataSource.setDriverClassName(driverClassName);
   dataSource.setUrl(url);
   dataSource.setUsername(username);
   dataSource.setPassword(password);
   con = dataSource.getConnection();
  } catch (Exception e) {
   e.printStackTrace();
  }
  return con;
 }
 
 //通过Spring注入依赖得到连接
 public static Connection getConByDMS2() throws SQLException{
  ApplicationContext context=DbTest.getContext();
  DriverManagerDataSource ds = (DriverManagerDataSource) context.getBean("dataSource2");
  Connection con =  ds.getConnection();
  return con;
 }
 
 //DBCP 连接配置
 public static Connection getConByDBCP() throws SQLException{
  ApplicationContext context=DbTest.getContext();
  BasicDataSource ds = (BasicDataSource) context.getBean("dataSource");
  Connection con =  ds.getConnection();
  return con;
 }


 //主调函数,测试
 public static void main(String[] args) {
  Connection con = null;
  DbTest db= new DbTest();
  try{
   //(1)DriverManagerDataSource
   con = db.getConByDMDS();
   System.out.println("DriverManagerDataSource=="+con.toString());
   //(2)DriverManagerDataSource by Spring
   con = db.getConByDMS2();
   System.out.println("DriverManagerDataSource by Spring=="+con.toString());
   //(3) DBCP Pool
   con = db.getConByDBCP();
   System.out.println("DBCP Pool=="+con.toString());
  } catch (Exception ex){
   ex.printStackTrace();
  }
 }
}