首页 > 代码库 > 【Spring实战】—— 14 传统的JDBC实现的DAO插入和读取

【Spring实战】—— 14 传统的JDBC实现的DAO插入和读取

从这篇开始学习Spring的JDBC,为了了解Spring对于JDBC的作用,先通过JDBC传统的流程,实现一个数据库的插入读取

  从这篇你可以了解到:

  1 传统的JDBC插入和读取的过程。

  2 如何通过JDBC连接Mysql

  如何通过JDBC连接mysql

  首先看一下下面这张图:

技术分享

  应用程序需要通过mysql的驱动程序,才能与数据连接。

  驱动程序下载地址:mysql-connector-java-5.1.13-bin.jar

  在设计程序的时候,应该采用接口编程的方式,这样能够减小数据操作与应用业务逻辑代码之间的耦合

 技术分享

  JDBC插入和读取过程

  使用传统的JDBC需要经过如下的几个步骤:

  1 加载驱动程序

Class.forName("com.mysql.jdbc.Driver");

  2 创建连接

Connection conn = (Connection) DriverManager.getConnection(url, userName,passwrod);

  3 创建执行计划

PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement("select * from persons");

  4 执行查询获取结果

            ResultSet rs = pstmt.executeQuery();            while (rs.next()) {                System.out.println("id : " + rs.getString(1) + " name : "+ rs.getString(2) + " age : " + rs.getInt(3));            }

  5 关闭查询结果

            if (rs != null) {                try {                    rs.close();                } catch (SQLException e) {                    e.printStackTrace();                }            }

  6 关闭执行计划

            if (pstmt != null) {                try {                    pstmt.close();                } catch (SQLException e) {                    e.printStackTrace();                }            }

  7 关闭连接

            if (conn != null) {                try {                    conn.close();                } catch (SQLException e) {                    e.printStackTrace();                }            }

 

  按照上面的几个步骤,来看一下实现的代码:

  首先是接口部分:

package com.spring.chap5.dao;public interface OldJdbc {    /**     * 插入数据     */    public void insertPerson(String id,String name,int age);    /**     * 查询所有结果     */    public void findAllPerson();}

  然后是实现部分

package com.spring.chap5.dao;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import com.mysql.jdbc.Connection;import com.mysql.jdbc.PreparedStatement;public class OldJdbcImpl implements OldJdbc{        String driver = "com.mysql.jdbc.Driver";    String userName = "root";    String passwrod = "123qwe";    String url = "jdbc:mysql://localhost:3306/test";    public void insertPerson(String id,String name,int age) {        try {            Class.forName(driver);            Connection conn = (Connection) DriverManager.getConnection(url, userName,passwrod);            PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement("insert into persons (id,name,age) values (?,?,?)");            pstmt.setString(1, id);            pstmt.setString(2, name);            pstmt.setInt(3, age);            pstmt.executeUpdate();            if (pstmt != null) {                try {                    pstmt.close();                } catch (SQLException e) {                    e.printStackTrace();                }            }            if (conn != null) {                try {                    conn.close();                } catch (SQLException e) {                    e.printStackTrace();                }            }        } catch (Exception e) {            e.printStackTrace();        }    }    public void findAllPerson() {        try {            Class.forName(driver);            Connection conn = (Connection) DriverManager.getConnection(url, userName,passwrod);            PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement("select * from persons");            ResultSet rs = pstmt.executeQuery();            while (rs.next()) {                System.out.println("id : " + rs.getString(1) + " name : "+ rs.getString(2) + " age : " + rs.getInt(3));            }            if (rs != null) {                try {                    rs.close();                } catch (SQLException e) {                    e.printStackTrace();                }            }            if (pstmt != null) {                try {                    pstmt.close();                } catch (SQLException e) {                    e.printStackTrace();                }            }            if (conn != null) {                try {                    conn.close();                } catch (SQLException e) {                    e.printStackTrace();                }            }        } catch (Exception e) {            e.printStackTrace();        }    }}

  可以看到,光是两个简单的插入和查询,就有如此多的代码,而且大部分都是相同的过程。因此spring的模板,就派上用场了。

  测试类如下:

public class test {    public static void main(String[] args) {        OldJdbc oldjdbc = new OldJdbcImpl();        oldjdbc.insertPerson("001", "xingoo1", 20);        oldjdbc.insertPerson("002", "xingoo2", 20);        oldjdbc.findAllPerson();    }}

  

  另外还需要一个很重要的部分,就是sql语句:

/*SQLyog v4.05Host - 4.1.11-nt : Database - test*********************************************************************Server version : 4.1.11-nt*/create database if not exists `test`;USE `test`;/*Table structure for table `test`.`persons` */drop table if exists `test`.`persons`;CREATE TABLE `persons` (  `id` varchar(20) NOT NULL default ‘‘,  `name` varchar(20) default NULL,  `age` int(10) default NULL,  PRIMARY KEY  (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;/*Data for the table `test`.`persons` */insert into `test`.`persons` values (001,xingoo1,20),(002,xingoo2,20);

 

【Spring实战】—— 14 传统的JDBC实现的DAO插入和读取