使用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="com.microsoft.jdbc.sqlserver.SQLServerDriver">
</property>
<property name="url"
value="jdbc:microsoft:sqlserver://localhost:1433;databasename=hibernate">
</property>
<property name="username"
value="sa"></property>
<property name="password"
value="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,接着就可以建立与数据库的连接了。