【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() + " name : "+ rs.getString() + " age : " + rs.getInt());
}
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(, id);
pstmt.setString(, name);
pstmt.setInt(, 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() + " name : "+ rs.getString() + " age : " + rs.getInt());
}
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("", "xingoo1", );
oldjdbc.insertPerson("", "xingoo2", );
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 ('','xingoo1',20),('','xingoo2',20);
【Spring实战】—— 14 传统的JDBC实现的DAO插入和读取的更多相关文章
- 【Spring实战】—— 16 基于JDBC持久化的事务管理
前面讲解了基于JDBC驱动的Spring的持久化管理,本篇开始则着重介绍下与事务相关的操作. 通过本文你可以了解到: 1 Spring 事务管理的机制 2 基于JDBC持久化的事务管理 Spring的 ...
- Spring实战6:利用Spring和JDBC访问数据库
主要内容 定义Spring的数据访问支持 配置数据库资源 使用Spring提供的JDBC模板 写在前面:经过上一篇文章的学习,我们掌握了如何写web应用的控制器层,不过由于只定义了SpitterRep ...
- SpringBoot实战(四)之使用JDBC和Spring访问数据库
这里演示的是h2databse示例,所以简单的介绍普及下h2database相关知识 H2数据库是一个开源的关系型数据库. H2是一个嵌入式数据库引擎,采用java语言编写,不受平台的限制,同时H2提 ...
- 【Spring实战】—— 15 Spring JDBC模板使用
前一篇通过对传统的JDBC的使用操作,可以体会到使用的繁琐与复杂,套句话说,是用了20%作了真正的工作,80%作了重复的工作. 那么通过本篇,可以了解如下的内容: 1 如何配置数据源 2 如何在spr ...
- Spring实战——无需一行xml配置实现自动化注入
已经想不起来上一次买技术相关的书是什么时候了,一直以来都习惯性的下载一份电子档看看.显然,如果不是基于强烈的需求或强大的动力鞭策下,大部分的书籍也都只是蜻蜓点水,浮光掠影. 就像有位同事说的一样,有些 ...
- (一)《Spring实战》——Spring核心
<Spring实战>(第4版) 第一章:Spring之旅 1. 简化Java开发 为了降低Java开发的复杂性,Spring采取了以下4种关键策略: 基于POJO的轻量级和最小侵入性编程: ...
- Spring实战第一章学习笔记
Spring实战第一章学习笔记 Java开发的简化 为了降低Java开发的复杂性,Spring采取了以下四种策略: 基于POJO的轻量级和最小侵入性编程: 通过依赖注入和面向接口实现松耦合: 基于切面 ...
- 【转】Nutz | Nutz项目整合Spring实战
http://blog.csdn.net/evan_leung/article/details/54767143 Nutz项目整合Spring实战 前言 Github地址 背景 实现步骤 加入spri ...
- (转)Nutz | Nutz项目整合Spring实战
http://blog.csdn.net/evan_leung/article/details/54767143 Nutz项目整合Spring实战 前言 Github地址 背景 实现步骤 加入spri ...
随机推荐
- 118th LeetCode Weekly Contest Pancake Sorting
Given an array A, we can perform a pancake flip: We choose some positive integer k <= A.length, t ...
- 前端 s 标签获取值
1. s标签获取action中的值: <s:property value="#parameters.mySessionPropKey"/> or <s:prop ...
- poj1002 字典树+map+查询单词出现次数
487-3279 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 309235 Accepted: 55223 Descr ...
- maven-eclipse-plugin downloadSources downloadJavadocs
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-eclip ...
- svn的branch truck tag
对于branch truck tag一直迷迷糊糊的,想搞明白,但是一直又没来弄明白,最近就用了这种方式来开发 可以我又不是完全了解怎么操作,所以查看了下资料,这个解释得很详细呀,连我都看得懂的东西,真 ...
- Python学习 day03
一.基本数据类型 python中的基本数据类型有以下几种: int -- 整数 python3中默认整数都是int型,python2中int的范围为-231~232-1(32位系统中)/ ...
- shell 操作符详解
= 赋值操作符,可以用于算术和字符串赋值 + 加法计算 - 减法运算 * 乘法运算 / 除法运算 ** 幂运算 % 模运算 取他除后的剩余数 因此这个十分好求公约数 += &qu ...
- 读《Wireshark网络分析就这么简单》读书笔记
晚上花了两个多小时看完这本书,记录下一些看书过程中的笔记. 一.问题:A和B 是否能正常通信? 两台服务器A和服务器B的网络配置 A ...
- 深入理解JavaScript系列(31):设计模式之代理模式
介绍 代理,顾名思义就是帮助别人做事,GoF对代理模式的定义如下: 代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问. 代理模式使得代理对象控制具体对象的引用.代理几乎可以是任何对 ...
- Win2D 官方文章系列翻译 - 预乘 Alpha
本文为个人博客备份文章,原文地址: http://validvoid.net/win2d-premultiplied-alpha/ 在计算机绘图中有两种表示颜色值不透明度的方法.Win2D 中两种方法 ...