【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.05
Host - 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);

 

本文转自博客园xingoo的博客,原文链接:【Spring实战】—— 14 传统的JDBC实现的DAO插入和读取,如需转载请自行联系原博主。

时间: 2024-10-30 20:49:05

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

【Spring实战】—— 16 基于JDBC持久化的事务管理

前面讲解了基于JDBC驱动的Spring的持久化管理,本篇开始则着重介绍下与事务相关的操作. 通过本文你可以了解到: 1 Spring 事务管理的机制 2 基于JDBC持久化的事务管理 Spring的事务管理的机制 Spring本身并不提供事务管理,它只是把事务管理提交给事务管理器,而事务管理器则有多种实现,常见的就是基于JDBC的.Hibernate的.JPA以及JTA的. 操作流程可以参考下面的图片: 其实还有好多种类的事务管理器,这里就不一一列举了. 基于JDBC持久化的事务管理 基于JD

Spring实战6-利用Spring和JDBC访问数据库

主要内容 定义Spring的数据访问支持 配置数据库资源 使用Spring提供的JDBC模板 写在前面:经过上一篇文章的学习,我们掌握了如何写web应用的控制器层,不过由于只定义了SpitterRepository和SpittleRepository接口,在本地启动该web服务的时候会遇到控制器无法注入对应的bean的错误,因此我决定跳过6~9章,先搞定数据库访问者一章. 在企业级应用开发中不可避免得会涉及到数据持久化层,在数据持久化层的开发过程中,可能遇到很多陷阱.你需要初始化数据库访问框架.

【Spring实战】—— 15 Spring JDBC模板使用

前一篇通过对传统的JDBC的使用操作,可以体会到使用的繁琐与复杂,套句话说,是用了20%作了真正的工作,80%作了重复的工作. 那么通过本篇,可以了解如下的内容: 1 如何配置数据源 2 如何在spring中使用模板 3 如何建立数据源的统一的基类 首先看一下如何配置数据源 我们可以使用3种方式配置数据源: 1 JNDI配置数据源 这种做法我是没用过,感觉每次都要去修改配置Tomcat之类的web容器,很是麻烦. 2 使用DBCP数据源连接池 一般情况下都是采用这种方式,对于连接池的实现,也有很

《Spring实战(第4版)》——第1章 Spring之旅 1.1简化Java开发

第1部分 Spring的核心 Spring可以做很多事情,它为企业级开发提供给了丰富的功能,但是这些功能的底层都依赖于它的两个核心特性,也就是依赖注入(dependency injection,DI)和面向切面编程(aspect-oriented programming,AOP). 作为本书的开始,在第1章"Spring之旅"中,我将快速介绍一下Spring框架,包括Spring DI和AOP的概况,以及它们是如何帮助读者解耦应用组件的. 在第2章"装配Bean"中

【Spring实战】—— 3 使用facotry-method创建单例Bean总结

如果有这样的需求: 1 不想再bean.xml加载的时候实例化bean,而是想把加载bean.xml与实例化对象分离. 2 实现单例的bean 以上的情况,都可以通过工厂方法factory-method来创建bean. 这样再加载bean.xml时,不会直接实例化bean,而是当调用factory-method所指的方法时,才开始真正的实例化. 首先看一下传统的单例模式的实现方式: 1 最原始的实现单例模式的方法(存在线程不安全): public class SingletonOne { pri

实战 Eclipse ,Jigloo, PostgreSQL,JDBC 开发数据库查询应用系统起步

数据|数据库 实战 Eclipse ,Jigloo, PostgreSQL,JDBC 开发数据库查询应用系统起步 1 安装 Eclipse笔者用的GNU/Linux先从 下载了些GTK+相关的包编译安装之后,到Eclipse主页上 找到了Linux下GTK的 Eclipse安装文件 2 .插件笔者安装了两个插件一个是GUI设计工具 jigloo,主页:http://cloudgarden.com/jigloo/ 一个是打包工具 fat jar exporterhttp://fjep.source

《Spring实战(第4版)》——导读

前言 百尺竿头更进一步.十几年前,Spring刚刚进入Java开发领域,其目标是简化企业级Java开发.它使用更为简单和轻量级的模型,该模型基于简单老式的Java对象,以此挑战了当时重量级的开发模型. 现在,已经过去了很多年,Spring也发布了众多的版本,我们可以看到Spring在企业级应用开发领域已经有了巨大的影响力.对于无数的Java项目来说,它就是事实上的标准,并且对于一些规范和它本来想取代的框架,Spring也对其演进产生了影响.毫无疑问,如果Spring不挑战之前版本的企业级Java

Spring实战2:装配bean—依赖注入的本质

主要内容 Spring的配置方法概览 自动装配bean 基于Java配置文件装配bean 控制bean的创建和销毁 任何一个成功的应用都是由多个为了实现某个业务目标而相互协作的组件构成的,这些组件必须相互了解.能够相互协作完成工作.例如,在一个在线购物系统中,订单管理组件需要与产品管理组件以及信用卡认证组件协作:这些组件还需要跟数据库组件协作从而进行数据库读写操作. 在Spring应用中,对象无需自己负责查找或者创建与其关联的其他对象,由容器负责将创建各个对象,并创建各个对象之间的依赖关系.例如

【Spring实战】—— 1 入门讲解

这个系列是学习spring实战的总结,一方面总结书中所写的精髓,另一方面总结一下自己的感想. 基础部分讲解了spring最为熟知的几个功能:依赖注入/控制反转 和 面向切面编程. 这两个就不再多说了,功能比较简单,也没有制作样例,后面再深入操作下. Spring使用POJO类编写程序,也就是简单的java对象. 这样spring带来的好处: 1 代码轻量级并减小编程的入侵. 2 通过依赖注入和控制反转实现松耦合. 3 基于切面和管理,进行声明式的编程. 4 通过模板,减少重复代码. 在Sprin