• 使用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="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,接着就可以建立与数据库的连接了。

  • 相关阅读:
    php 实现四种排序两种查找
    GIT常用命令
    2016-the brave never die
    Apache 的ab压力测试工具
    SQL语句优化实践
    C#设计模式:访问者模式(Vistor Pattern)
    泛型反射性能优化
    C#GC垃圾回收和析构函数和IDisposable的使用
    C#配合大数据开发,nest.dll的使用
    C#导出大量数据到excel,怎么提升性能
  • 原文地址:https://www.cnblogs.com/dingding0505/p/3725888.html
Copyright © 2020-2023  润新知