前边我们已经使用过传统JDBC编程方式,接下来让我们看下Spring JDBC框架提供的更好的解决方案。
1)准备需要的jar包并添加到类路径中:
- //JDBC抽象框架模块
- org.springframework.jdbc-3.0.5.RELEASE.jar
- //Spring事务管理及一致的DAO访问及非检查异常模块
- org.springframework.transaction-3.0.5.RELEASE.jar
- //hsqldb驱动,hsqldb是一个开源的Java实现数据库,请下载hsqldb2.0.0+版本
- hsqldb.jar
2)传统JDBC编程替代方案:
在使用JdbcTemplate模板类时必须通过DataSource获取数据库连接,Spring JDBC提供了DriverManagerDataSource实现,它通过包装“DriverManager.getConnection”获取数据库连接,具体DataSource相关请参考【7.5.1控制数据库连接】。
- package cn.javass.spring.chapter7;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import org.junit.AfterClass;
- import org.junit.BeforeClass;
- import org.junit.Test;
- import org.springframework.jdbc.core.JdbcTemplate;
- import org.springframework.jdbc.core.RowCallbackHandler;
- import org.springframework.jdbc.datasource.DriverManagerDataSource;
- public class JdbcTemplateTest {
- private static JdbcTemplate jdbcTemplate;
- @BeforeClass
- public static void setUpClass() {
- String url = "jdbc:hsqldb:mem:test";
- String username = "sa";
- String password = "";
- DriverManagerDataSource dataSource = new DriverManagerDataSource(url, username, password);
- dataSource.setDriverClassName("org.hsqldb.jdbcDriver");
- jdbcTemplate = new JdbcTemplate(dataSource);
- }
- @Test
- public void test() {
- //1.声明SQL
- String sql = "select * from INFORMATION_SCHEMA.SYSTEM_TABLES";
- jdbcTemplate.query(sql, new RowCallbackHandler() {
- @Override
- public void processRow(ResultSet rs) throws SQLException {
- //2.处理结果集
- String value = rs.getString("TABLE_NAME");
- System.out.println("Column TABLENAME:" + value);
- }
- });
- }
- }
接下来让我们具体分析一下:
1) jdbc:hsqldb:mem:test:表示使用hsqldb内存数据库,数据库名为“test”。
2) public static void setUpClass():使用junit的@BeforeClass注解,表示在所以测试方法之前执行,且只执行一次。在此方法中定义了DataSource并使用DataSource对象创建了JdbcTemplate对象。JdbcTemplate对象是线程安全的。
3) JdbcTemplate执行流程:首先定义SQL,其次调用JdbcTemplate方法执行SQL,最后通过RowCallbackHandler回调处理ResultSet结果集。
Spring JDBC解决方法相比传统JDBC编程方式是不是简单多了,是不是只有可变部分需要我们来做,其他的都由Spring JDBC框架来实现了。
接下来让我们深入JdbcTemplate及其扩展吧。
更多关系Spring的信息
Spring 论坛 http://www.itchm.com/forum-59-1.html
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>