1.JDBC概述
2.JDBC获取连接
3.JDBC实现对单表数据增、删、改、查
4.JDBC事务
5.JDBC获取连接与关闭连接工具类实现
6.JDBC实现登录案例
7.PreparedStatement预编译对象
8.DAO模式
一、JDBC的概述
1.JDBC的概念
客户端操作MySQL数据库的方式
1、使用第三方客户端来访问MySQL:SQLyog、Navicat、SQLWave、MyDB Studio、EMS SQL Manager for MySQL
2、使用MySQL自带的命令行方式
3、通过Java来访问MySQL数据库,今天要学习的内容
JDBC:Java Data Base Connectivity(Java数据库连接) JDBC是Java访问数据库的标准规范
作用:JDBC是用于执行SQL语句的Java API(Java语言通过JDBC可以操作数据库)
2.JDBC的由来
(1)直接写代码操作数据库
直接写代码操作数据库存在的问题:
不知道MySQL数据库的操作方式,解析方式
代码繁琐,写起来麻烦
MySQL和Oracle等其他数据库的操作方式和解析方式不同,每个数据库都要写一套代码
MySQL和Oracle等其他数据库相互切换麻烦
(2)使用JDBC
JDBC规范定义接口,具体的实现由各大数据库厂商来实现 JDBC是Java访问数据库的标准规范。真正怎么操作数据库还需要具体的实现类,也就是数据库驱动。每个数据库厂商根据自家数据库的通信格式编写好自己数据库的驱动。所以我们只需要会调用JDBC接口中的方法即可。数据库驱动由数据库厂商提供。
JDBC的好处:
我们只需要会调用JDBC接口中的方法即可,使用简单
使用同一套Java代码,进行少量的修改就可以访问其他JDBC支持的数据库
3.JDBC会用到的包
java.sql:JDBC访问数据库的基础包
javax.sql: JDBC访问数据库的扩展包
数据库的驱动,各大数据库厂商来实现。如:MySQL的驱动:com.mysql.jdbc.Driver
4.JDBC四个核心对象
这几个类都是在java.sql包中
DriverManager: 用于注册驱动
Connection: 表示与数据库创建的连接
Statement: 执行SQL语句的对象
ResultSet: 结果集
二、JDBC获取连接
Connection表示Java程序与数据库之间的连接,只有拿到Connection才能操作数据库。
JDBC获取连接步骤 1.导入驱动Jar包 2.注册驱动 3.获取连接
1.导入驱动Jar包
链接:https://pan.baidu.com/s/1YlRPqKId52nZxb8YgnHcPA
提取码:2a75
1、新建文件夹、名字通常为lib。
2、将Jar包复制到lib文件夹里面
3、Build Path。
2.注册驱动
我们Java程序需要通过数据库驱动才能连接到数据库,因此需要注册驱动。 MySQL的驱动的入口类是:com.mysql.jdbc.Driver
使用Class.forName("com.mysql.jdbc.Driver")加载驱动
示例代码
package com.xj.jdbc;
public class Demo {
public static void main(String[] args) {
try {
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
} catch (Exception e) {
e.printStackTrace();
}
}
}
3.获取连接
(1)API介绍
java.sql.DriverManager类中有如下方法获取数据库连接
static Connection |
getConnection(String url, String user, String password) 尝试建立与给定数据库URL的连接。 |
(2)参数说明
String url:连接数据库的URL,用于说明连接数据库的位置
String user:数据库的账号
String password:数据库的密码
连接数据库的URL地址格式:协议名:子协议://服务器名或IP地址:端口号/数据库名?参数=参数值
MySQL写法:jdbc:mysql://localhost:3306/db 如果是本地服务器,端口号是默认的3306,则可以简写:jdbc:mysql:///db
(3)注意事项
如果数据出现乱码需要加上参数: ?useUnicode=true&characterEncoding=utf8,表示让数据库以UTF-8编码来处理数据。
如: jdbc:mysql://localhost:3306/day24?useUnicode=true&characterEncoding=utf8
(4)使用步骤
DriverManager.getConnection(url, user, password); 传入对应参数即可
(5)案例
package com.xj.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
public class Demo {
public static void main(String[] args) {
try {
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
//获取连接
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db", "root", "root");
System.out.println(conn);
} catch (Exception e) {
e.printStackTrace();
}
}
}
连接成功
连接失败
三、JDBC实现对单表数据增、删、改、查
1.准备数据
我们要对数据库进行增、删、改、查,需要使用Statement对象来执行SQL语句。
CREATE TABLE emp (
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(10),
gender CHAR(1), -- 性别
salary DOUBLE, -- 工资
join_date DATE -- 入职日期
);
INSERT INTO emp(NAME,gender,salary,join_date) VALUES('孙悟空','男',7200,'2013-02-24');
INSERT INTO emp(NAME,gender,salary,join_date) VALUES('猪八戒','男',3600,'2010-12-02');
INSERT INTO emp(NAME,gender,salary,join_date) VALUES('唐僧','男',9000,'2008-08-08');
INSERT INTO emp(NAME,gender,salary,join_date) VALUES('白骨精','女',5000,'2015-10-07');
INSERT INTO emp(NAME,gender,salary,join_date) VALUES('蜘蛛精','女',4500,'2011-03-14');
INSERT INTO emp(NAME,gender,salary,join_date) VALUES('沙僧','男',10000,'2019-11-25');
2.JDBC实现对单表数据增、删、改
(1)API介绍
1、获取Statemen对象API介绍
在java.sql.Connection接口中有如下方法获取到Statement对象
Statement |
创建一个 Statement对象,用于将SQL语句发送到数据库。 |
2、Statement的API介绍
int |
executeUpdate(String sql) 根据执行的DML(INSERT、UPDATE、DELETE)语句,返回受影响的行数 |
ResultSet |
executeQuery(String sql) 根据查询语句返回结果集,只能执行SELECT语句 |
MySQL中,只要不是查询就是修改。
executeUpdate用于执行增删改
executeQuery:用于执行查询
(2)使用步骤
1、注册驱动
2、获取连接
3、获取Statement对象
4、使用Statement对象执行SQL语句
5、释放资源
(3)案例
1、添加数据
package com.xj.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class Demo {
public static void main(String[] args) {
//添加
try {
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
//获取连接
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db", "root", "root");
//获取Statement对象
Statement st = conn.createStatement();
//使用Statement对象执行SQL语句 --执行增删改用executeUpdate 执行查询用executeQuery
String sql = "insert into emp values(null,'张三','男',5000,'1999-10-10')";
int result = st.executeUpdate(sql);//返回的是数据库受影响的条数
System.out.println("添加"+result+"条数据");
//释放资源
st.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
2、更新数据
package com.xj.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class Demo {
public static void main(String[] args) {
/*//添加
try {
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
//获取连接
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db", "root", "root");
//获取Statement对象
Statement st = conn.createStatement();
//使用Statement对象执行SQL语句 --执行增删改用executeUpdate 执行查询用executeQuery
String sql = "insert into emp values(null,'张三','男',5000,'1999-10-10')";
int resu