文章目录
前言
小滴课堂,旨在让编程不在难学,让技术与生活更加有趣。 随着互联网+的时代,在线教育技术越来越便捷,小滴课堂依托在线教育时间以及空间上的便利,为广大IT从业者提供了更为方便、快捷的学习交流途径、提供大量高质量的IT在线课程。更多教程请访问xdclass.net(添加VX:xdclass99)
第十四章 Javaweb核心技术之实战JDBC连接Mysql数据库
第1集 Java开发必备技术之JDBC相关概念介绍
简介:讲解什么是JDBC和相关介绍
- 什么是JDBC
- 全称 Java DataBase Connectivity, 是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口
- 提供了一种接口基准,可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序
- 应用程序代码一般不能直接访问数据库,需要通过相应的数据库驱动程序才行,
- 什么是数据库驱动? 通俗来说就是数据库厂商的JDBC接口实现
-
JDBC连接MySQL相关概念
- 数据库驱动:不同数据库开发商(比如oracle mysql等)为了某一种开发语言能够实现统一的数据库调用而开发的一个程序, 作用相当于一个翻译人员, 将某个语言(比如java)中对数据库的调用通过这个翻译成各个种类的数据库 自己的数据库语言
- Connection连接:特定数据库的连接(会话),在连接上下文中执行sql语句并返回结果
- Statement 语句: 创建执行SQL语句的statement, 有好几种实现类,用于执行对应的sql
- ResultSet结果集:SQL查询返回的结果信息
-
使用Java连接Mysql的步骤
- 加载JDBC驱动程序
- 建立数据库连接Connection
- 创建执行SQL的语句Statement
- 处理执行结果ResultSet
- 释放连接资源
第2集 JDBC相关驱动包导入和数据库表准备
简介:准备数据库表相关的
- 基础环境:
- 自己搭建好Mysql数据库,推荐是Mysql5.7版本
- 注意 如果连接不上数据库
- 检查防火墙-云服务器的网络安全组
- mysql有没开启允许远程连接
- 注意 如果连接不上数据库
- 准备Mysql客户端软件
- Windows: navicat、mysqlworkbench
- mac: sequel pro
- 自己搭建好Mysql数据库,推荐是Mysql5.7版本
- Mysql驱动jar包导入
- mysql数据库表建立
CREATE TABLE `user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`phone` varchar(32) DEFAULT NULL,
`pwd` varchar(128) DEFAULT NULL,
`sex` int(2) DEFAULT NULL,
`img` varchar(128) DEFAULT NULL,
`create_time` datetime DEFAULT NULL,
`role` int(11) DEFAULT NULL COMMENT '1是普通用户,2是管理员',
`username` varchar(128) DEFAULT NULL,
`wechat` varchar(128) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `user` (`id`, `phone`, `pwd`, `sex`, `img`, `create_time`, `role`, `username`,`wechat`)
VALUES
(1,'123','666',1,'xdclass.net','2021-09-09 00:00:00',1,'jack','xdclass6'),
(2,'2323432','794666918',1,'wwwww','2020-05-20 04:54:01',1,'小滴Anna姐姐','xdclass-anna'),
(3,'2323432','xdclass-lw',1,'wwwww','2020-05-20 04:54:42',1,'二当家小D','xdclass1'),
(4,'2323432','3232323',1,'wwwww','2020-05-20 04:55:07',1,'老王','xdclass-lw');
第3集 开发你的第一个JDBC连接Mysql程序
简介:快速使用jdbc连接Mysql
-
使用Java连接Mysql的步骤
- 加载JDBC驱动程序
- 建立数据库连接Connection
- 创建执行SQL的语句Statement
- 处理执行结果ResultSet
- 释放连接资源
- resultSet.close();
- statement.close();
- connection.close();
-
第一个jdbc程序
public static void main(String [] args) throws Exception{
//加载JDBC驱动程序
Class.forName("com.mysql.jdbc.Driver");
//建立数据库连接Connection
String username = "root";
String password = "xdclass.net";
//协议:子协议://ip:端口/数据库名称?参数1=值1&参数2=值2
String url = "jdbc:mysql://127.0.0.1:3306/xd_web?useUnicode=true&characterEncoding=utf-8&useSSL=false";
Connection connection = DriverManager.getConnection(url,username,password);
//创建执行SQL的语句Statement
Statement statement = connection.createStatement();
//处理执行结果ResultSet
ResultSet resultSet = statement.executeQuery("select * from user");
while (resultSet.next()){
System.out.println("用户名称 name="+ resultSet.getString("username") + " 联系方式 wechat="+ resultSet.getString("wechat"));
}
//释放连接资源
resultSet.close();
statement.close();
connection.close();
}
第4集 SQL注入攻击和Statement预编译语句
简介:讲解SQL注入攻击Statement预编译语句
- 什么是SQL注入攻击
- 可以执行恶意SQL语句,将任意SQL代码插入数据库查询,使用SQL注入来添加,修改和删除数据库中的记录
- PrepareStatement
- 字面可译为预声明,内部包含一个预编译的sql语句,参数采用占位符 ? 进行填充
- 为啥可以防注入
- 第一次操作数据库之前,SQL语句已经被数据库分析和编译,对应的执行计划也会缓存下来,之后数据库就会以参数化的形式进行查询
- 传入的值始终都是会作为一个值,而不是sql指令
- 好处:维护性好、提高sql效率、增加安全性
第5集 实战JDBC连接数据库完成新增和删除功能
简介:始终JDBC新增记录和删除记录功能
- 新增记录
PreparedStatement preparedStatement = connection.prepareStatement("insert into user(username, pwd,sex,role,create_time) values(?,?,?,?,?) ");
preparedStatement.setString(1,"二当家小D");
preparedStatement.setString(2,"123456");
preparedStatement.setInt(3,1);
preparedStatement.setInt(4,2);
preparedStatement.setTimestamp(5,new Timestamp(System.currentTimeMillis()));
//执行
preparedStatement.execute();
preparedStatement.close();
connection.close();
- 删除记录
Connection connection = DriverManager.getConnection(url, username, password);
PreparedStatement preparedStatement = connection.prepareStatement("delete from user where id=?");
preparedStatement.setInt(1,2);
//执行
preparedStatement.execute();
preparedStatement.close();
connection.close();
第6集 实战JDBC控制Mysql事务控制
简介:讲解JDBC控制Mysql事务
-
事务:
- 一个最小的不可再分的工作单元,通常一个事务对应一个完整的业务
- 例如银行账户转账业务,该业务就是一个最小的工作单元
-
四大特性
- 原子性(A):事务是最小单位,不可再分
- 一致性©:事务要求所有的DML语句操作的时候,必须保证同时成功或者同时失败
- 隔离性(I):事务A和事务B之间具有隔离性
- 持久性(D):是事务的保证,事务终结的标志(内存的数据持久到硬盘文件中)
-
事务的一些术语
- 开启事务:Start Transaction
- 事务结束:End Transaction
- 提交事务:Commit Transaction
- 回滚事务:Rollback Transaction
-
JDBC事务控制实操
private static void testTransaction() throws Exception {
//加载JDBC驱动程序
Class.forName("com.mysql.jdbc.Driver");
//建立数据库连接Connection
String username = "root";
String password = "xdclass.net";
//协议:子协议://ip:端口/数据库名称?参数1=值1&参数2=值2
String url = "jdbc:mysql://127.0.0.1:3306/xd_web?useUnicode=true&characterEncoding=utf-8&useSSL=false";
Connection connection = DriverManager.getConnection(url, username, password);
try (
PreparedStatement ps1 = connection.prepareStatement("insert into user(username, pwd) values(?,?) ");
PreparedStatement ps2 = connection.prepareStatement("insert into user(username, pwd) values(?,?) ")) {
//JDBC中默认事务是自动提交的,false就不会自动提交
connection.setAutoCommit(false);
ps1.setString(1, "1111tranc ps 1二当家小D");
ps1.setString(2, "123456");
ps2.setString(1, "2222tranc ps 2二当家小D");
ps2.setString(2, "123456");
ps1.execute();
//模拟异常
int i = 1/0;
ps2.execute();
} catch (Exception e) {
e.printStackTrace();
//事务回滚
connection.rollback();
} finally {
//事务提交
connection.commit();
connection.close();
}
}