【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 ...
随机推荐
- [八分之一的男人]POJ - 1743 后缀数组 height分组 带详解
题意:求最长不可重叠的相同差值子串的长度 这道题算是拖了好几个月,现在花了点时间应该搞懂了不少,尝试分析一下 我们首先来解决一个退化的版本,求最长不可重叠的相同子串(差值为0) 比如\(aabaaba ...
- HDU - 2256 矩阵快速幂 带根号的递推
题意:求$ [(\sqrt{2}+\sqrt{3})^{2n}] mod 1024 $ 分析: 把指数的2带入 原式等于 $ [(5+2\sqrt{6})^n] $ 有一个重要的结论是n次运算后其结果 ...
- es6 封装一个登录注册的验证滑块
1,需求分析 滑块从左滑到右,开始滑.结束滑两种状态.两种状态显示的内容和样式的不同. 这是淘宝注册验证滑块的示例图 2,代码分析 const render = Symbol('render') co ...
- Oracle9i之xmltype应用(2)
Oracle 9i提供的XML内置特性: Oracle 9i支持XMLType类型,它是一种Oracle 9i系统定义的对象类型.XMLType有内置的函数,有力的提供了推XML的创建,索检,索引等功 ...
- drf之序列化器的使用
一.序列化器-Serializer 作用: 1. 序列化,序列化器会把模型对象转换成字典,经过response以后变成json字符串 2. 完成数据校验功能 3. 反序列化,把客户端发送过来的数据,经 ...
- 使用Junit进行自动单元测试
软件工程第二次作业 选择开发工具 使用Eclipse进行java程序编写:安装过程如图: 练习自动单元测试技术 参考资料:[Junit入门使用教程][https://www.cnblogs.com/y ...
- TT 安装 之 AIX
# mkgroup -'A' id='1000' adms='root' tt -- 创建用户 # mkuser id='1000' pgrp='tt' groups='tt' adms='root' ...
- gulp打包css/image/Less/Sass
其他的和打包前一篇随笔(打包js) http://www.cnblogs.com/teersky/p/7251329.html 相同,本篇文章主要写gulpFile.js的配置: 安装CSS打包插件: ...
- 千图网爬图片(BeautifulSoup)
import requests from bs4 import BeautifulSoup import os #导入os模块 class TuKuSpider(): ""&quo ...
- URL篇之不安全字符处理
URL是可移植的.它要统一命名因特网上的所有资源,就需要通过各种不同的协议来传送这些资源.这些协议在传输数据时会使用不同的机制,所以,设计URL,使其可以通过任意因特网协议安全地传输是很重要的. UR ...