首页 > 代码库 > 使用Spring的JdbcTemplate访问数据库 转

使用Spring的JdbcTemplate访问数据库 转

使用Spring的JdbcTemplate访问数据库

JdbcTemplate 模板可以简化JDBC操作,但是创建一个JdbcTemplate需要一个DataSource接口,在Spring中,当然就是向 JdbcTemplate中注入一个DataSource,然后通过JdbcTemplate来获取一个连接(Connection)。

假设SQL Server 2000数据库(新建的数据库名称为hibernate)中有一张person表,简单地记录了人员的详细信息。

使用Spring的IOC机制实现注入,配置XML代码如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">


<bean id="springDataSource"
   class="org.springframework.jdbc.datasource.DriverManagerDataSource">
   <property name="driverClassName"
    value="http://www.mamicode.com/com.microsoft.jdbc.sqlserver.SQLServerDriver">
   </property>
   <property name="url"
    value="http://www.mamicode.com/jdbc:microsoft:sqlserver://localhost:1433;databasename=hibernate">
   </property>
   <property name="username" value="http://www.mamicode.com/sa"></property>
   <property name="password" value="http://www.mamicode.com/111111"></property>
</bean>


<bean id="jdbcTemplate"
   class="org.springframework.jdbc.core.JdbcTemplate" abstract="false"
   lazy-init="false" autowire="default" dependency-check="default">
   <property name="dataSource">
    <ref bean="springDataSource" />
   </property>
</bean>

</beans>

首先编写一个PersonDao,代码如下所示:

package org.shirdrn.jdbcTemplate.dao;

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

import javax.sql.DataSource;

import org.shirdrn.interf.IPersonDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;

public class PersonDao implements IPersonDao {
private JdbcTemplate jdbcTemplate;

public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {    // 注入JdbcTemplate
   this.jdbcTemplate = jdbcTemplate;
}

public Connection getConnection(){    // 获取Connection
   ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
   DataSource springDataSource = (DataSource)ctx.getBean("springDataSource");
   JdbcTemplate jdbcTemplate = (JdbcTemplate)ctx.getBean("jdbcTemplate");
   /*jdbcTemplate.setDataSource(springDataSource);   
   setJdbcTemplate(jdbcTemplate);     */
   DataSource dataSource = jdbcTemplate.getDataSource();
   Connection conn = null;
   try {
    conn = dataSource.getConnection();
   } catch (SQLException e) {
    e.printStackTrace();
   }
   return conn;
}

public ResultSet queryPersons(String sql){
   ResultSet rs = null;
   try {
    Connection connection = getConnection();
    Statement st = connection.createStatement();
    rs = st.executeQuery(sql);
   } catch (SQLException e) {
    e.printStackTrace();
   }
   return rs;
}
}

上面注释掉的两行代码:

   jdbcTemplate.setDataSource(springDataSource);
   setJdbcTemplate(jdbcTemplate);

其实是多余的,实际上Spring的IOC容器会自动检测并自动注入的。

建立测试主函数:

package org.shirdrn.main;

import java.sql.ResultSet;
import java.sql.SQLException;

import org.shirdrn.jdbcTemplate.dao;

public class Main {

public static void main(String[] args){
   PersonDao pd = new PersonDao();
   ResultSet rs = pd.queryPersons("select * from person");
   int n = 0;
   try {
    while(rs.next()){
     n++;
     System.out.println("id     = "+rs.getString("id"));
     System.out.println("name   = "+rs.getString("name"));
     System.out.println("gender = "+rs.getString("gender"));
     System.out.println("age    = "+rs.getString("age"));
     System.out.println("addr   = "+rs.getString("addr"));
     System.out.println("*******************************");
    }
    System.out.println("数据库中共有记录 "+n+" 条");
   } catch (SQLException e) {
    e.printStackTrace();
   }
}
}

保证数据库表中有测试数据,(我的)运行程序结果输出如下所示:

id     = 222403199901011111
name   = 刘备
gender = 男       
age    = 21
addr   = 北京
*******************************
id     = 222403199901011112
name   = 张飞
gender = 男       
age    = 23
addr   = 天津
*******************************
id     = 222403199901011113
name   = 吕布
gender = 男       
age    = 22
addr   = 上海
*******************************
id     = 222403199901011114
name   = 貂蝉
gender = 女       
age    = 22
addr   = 大连
*******************************
id     = 222403199901011115
name   = 董卓
gender = 男       
age    = 20
addr   = 长春
*******************************
id     = 222403199901011116
name   = 关羽
gender = 男       
age    = 18
addr   = 北京
*******************************
id     = 222403199901011117
name   = 李逵
gender = 女       
age    = 19
addr   = 成都
*******************************
id     = 222403199901011118
name   = 宋江
gender = 女       
age    = 21
addr   = 青岛
*******************************
id     = 222403199901011119
name   = 林冲
gender = 男       
age    = 23
addr   = 杭州
*******************************
id     = 222403199901011120
name   = 高俅
gender = 男       
age    = 21
addr   = 敦化
*******************************
id     = 222403199901011121
name   = 晁盖
gender = 男       
age    = 20
addr   = 广州
*******************************
id     = 222403199901011122
name   = 王五
gender = 女       
age    = 18
addr   = 深圳
*******************************
id     = 222403199901011123
name   = 张三
gender = 男       
age    = 17
addr   = 兰州
*******************************
id     = 222403199901011124
name   = 李四
gender = 女       
age    = 25
addr   = 北京
*******************************
id     = 222403199901011125
name   = 赵启
gender = 男       
age    = 28
addr   = 香港
*******************************
数据库中共有记录 15 条

注 入的DataSource是org.springframework.jdbc.datasource.DriverManagerDataSource的实例,然后在一个JdbcTemplate中注入已经获取到的DataSource,接着就可以建立与数据库的连接了。