【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 ...
随机推荐
- css 之 BFC
1,定义 BFC为块级格式化上下文,也就是一块区域内的封闭空间,里面元素无论怎么样,都不会影响外部元素. 2,触发条件 html 根元素 display的值为 inline-block.table-c ...
- PIE SDK矢量数据的投影转换
1. 功能简介 目前在地理信息领域中数据包括矢量和栅格两种数据组织形式 ,每一种数据都可以对投影进行转换,目前PIE SDK支持矢量和栅格数据的投影转换功能,下面对矢量数据的投影转换功能进行介绍. 2 ...
- PIE SDK去相关拉伸
1.算法功能简介 由于高度相关的数据集经常生成十分柔和的彩色图像,因此经常使用 去相关拉伸工具来体消除多光谱数据集中的高度相关性, 从而生成一幅色彩亮丽的彩色合成图像.去相关拉伸需要 3 个输入波段, ...
- layui table合计但是未计算的解决
在项目里table开启合计功能,但是并未进行数据计算,后来发现是field写错了的问题,上代码 for(var i = 0; i < that.checkboxAll.data.length; ...
- 【3dsMax安装失败,如何卸载、安装3dMax 2011?】
AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...
- C#知识点提要
本篇博文主要对asp.net mvc开发需要撑握的C#语言知识点进行简单回顾,尤其是C# 3.0才有的一些C#语言特性.对于正在学asp.net mvc的童鞋,不防花个几分钟浏览一下.本文要回顾的C# ...
- Ace教你一步一步做Android新闻客户端(四) 优化Bitmap大法
我计划着把需要用到的知识分解开来写,趁着我们要开发这款客户端的机会把安卓所有移动客户端开发中的技术贯穿其中,也是我自己成长的过程.By Ace in 20160121 我们开发一款新闻客户端程序,它的 ...
- TOJ 2641 Gene
描述 How can millions of different and complex structures be built using only a few simple building bl ...
- ie8点击焦点有虚线框兼容问题
a标签的: 方法一:在IE下是使用html属性:hideFoucs,在HTML标签中加上hidefocus=”true” 属性即可,但这个属性是IE私有的,Firefox是不认的. <a hre ...
- [转]微信小程序,开发大起底
本文转自:http://blog.csdn.net/baiyuzhong2012/article/details/54378497 作者简介:张智超,北京微函工坊开发工程师,CSDN微信开发知识库特邀 ...