【Spring实战】—— 14 传统的JDBC实现的DAO插入和读取
时间:2022-04-22
本文章向大家介绍【Spring实战】—— 14 传统的JDBC实现的DAO插入和读取,主要内容包括如何通过JDBC连接mysql、JDBC插入和读取过程、按照上面的几个步骤,来看一下实现的代码:、另外还需要一个很重要的部分,就是sql语句:、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
从这篇开始学习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);
- Numpy 修炼之道 (9)—— 广播机制
- python爬虫人门(10)Scrapy框架之Downloader Middlewares
- 11.python线程
- Numpy 修炼之道 (8)—— 常用函数
- Numpy 修炼之道 (7)—— 形状操作
- 洛谷P3391 【模板】文艺平衡树(Splay)(FHQ Treap)
- 12.python进程协程异步IO
- POJ3622 Gourmet Grazers(FHQ Treap)
- 洛谷P3201 [HNOI2009]梦幻布丁
- 洛谷P3374 【模板】树状数组 1(CDQ分治)
- 自然语言处理基础知识1. 分词(Word Cut)2. 词性标注(POS Tag)3.自动标注4.文本分类5.评估6.从文本提取信息7.分析句子结构《python自然语言处理》各章总结:
- 洛谷P3384 【模板】树链剖分
- 洛谷P2147 [SDOI2008]Cave 洞穴勘测
- linux基础
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 用Python里面的Xpath完成一个在线汇率转换器
- 详解请求消息 resquest
- Android中窗口Input事件接收
- Linux下常用命令
- Cypress系列(53)- as() 命令详解
- Educational Codeforces Round 81 (Rated for Div. 2) A. Display The Number
- Cypress系列(55)- 设置全局 URL
- Linux不同共享库中同名函数的处理
- Cypress系列(56)- 避免访问多个站点
- Cypress系列(57)- 删除等待代码
- DOM 又是个什么鬼?
- Cypress系列(58)- 停用条件测试
- 会python真的可以为所欲为——爆破前端加密登录
- XML 出来接客了!
- Cypress系列(59)- 实时调试和中断