MySQL第04篇:JDBC

这篇博客详细介绍了Java访问数据库的标准规范JDBC,包括JDBC的概述、核心API、DriverManager类、Connection接口、Statement接口的使用,以及PreparedStatement、事务处理、数据库连接池和Spring JDBC的初步应用。通过实例演示了JDBC操作数据库的步骤,强调了防止SQL注入和使用数据库连接池的重要性。
摘要由CSDN通过智能技术生成

核心概述:在实际开发中,我们需要通过Java程序来操作数据库,此时Java给我们提供了Java访问数据库的标准规范就是JDBC,我们可以通过调用JDBC接口中的方法实现操作数据库。

第一章:JDBC快速入门

1.1-客户端操作MySQL的方式

01-使用第三方客户端来访问 MySQL:SQLyog、Navicat、SQLWave、MyDB Studio、EMS SQL Manager for MySQL 。

02-使用 MySQL 自带的命令行方式 。

03-通过 Java 来访问 MySQL 数据库,本篇要讲解的内容

1.2-JDBC概述

什么是JDBC

JDBC (Java Database Connectivity,简称JDBC )是 Java 访问数据库的标准规范,真正怎么操作数据库还需要具体的实现类,也就是数据库驱动。每个 数据库厂商根据自家数据库的通信格式编写好自己数据库的驱动。所以我们只需要会调用 JDBC 接口中的方法即可,数据库驱动由数据库厂商提供。

JDBC的好处

01-程序员如果要开发访问数据库的程序,只需要会调用 JDBC 接口中的方法即可,不用关注类是如何实现的。

02-使用同一套 Java 代码,进行少量的修改就可以访问其他 JDBC 支持的数据库 。

使用 JDBC 开发使用到的包

会使用到的包 说明
java.sql 所有与 JDBC 访问数据库相关的接口和类
javax.sql 数据库扩展包,提供数据库额外的功能。如:连接池
数据库的驱动 由各大数据库厂商提供,需要额外去下载,是对 JDBC 接口实现的类

1.3-JDBC核心API

接口或类 作用
DriverManager 类 1) 管理和注册数据库驱动
2) 得到数据库连接对象
Connection 接口 一个连接对象,可用于创建 Statement 和 PreparedStatement 对象
Statement 接口 一个 SQL 语句对象,用于将 SQL 语句发送给数据库服务器。
PreparedStatement 接口 一个 SQL 语句对象,是 Statement 的子接口
ResultSet 接口 用于封装数据库查询的结果集,返回给客户端 Java 程序

1.4-导入驱动jar包

下载

链接:https://pan.baidu.com/s/1igjB1mTP7GBLBAZGP_bsGA
提取码:v72g

导入步骤

1.5-加载和注册驱动

加载方法

加载和注册驱动的方法 描述
Class.forName(数据库驱动实现类) 加载和注册数据库驱动,数据库驱动由 mysql 厂商"com.mysql.jdbc.Driver"

具体实现

public class Demo1 {
   
 public static void main(String[] args) throws ClassNotFoundException {
   
     //抛出类找不到的异常,注册数据库驱动
 	Class.forName("com.mysql.jdbc.Driver");
 }
}

疑问:为什么这样可以注册驱动?

public class Driver implements java.sql.Driver {
   
     public Driver() throws SQLException {
   
     }
     static {
   
         try {
   
             DriverManager.registerDriver(new Driver()); //注册数据库驱动
             } catch (SQLException var1) {
   
             throw new RuntimeException("Can't register driver!");
         }
     }
}

com.mysql.jdbc.Driver 源代码:

Driver 接口,所有数据库厂商必须实现的接口,表示这是一个驱动类。

注意事项

从 JDBC3 开始,目前已经普遍使用的版本。可以不用注册驱动而直接使用。Class.forName 这句话可以省略。

为了向下兼容,建议不要省略。

第二章:DriverManager类

2.1-DriverManager作用

  1. 管理和注册驱动
  2. 创建数据库的连接

2.2-类中的方法

DriverManager 类中的静态方法 描述
Connection getConnection (String url, String user, String password) 通过连接字符串,用户名,密码来得到数据库的连接对象
Connection getConnection (String url, Properties info) 通过连接字符串,属性对象来得到连接对象

2.3-连接数据库的四个参数

参数 说明
用户名 登录的用户名
密码 登录的密码
连接字符串 URL 不同的数据库 URL 是不同的
mysql 的写法jdbc:mysql://localhost:3306/数据库[?参数名=参数值]
驱动类的字符串名 com.mysql.jdbc.Driver

2.4-连接数据库URL

格式

协议名:子协议://服务器名或 IP 地址:端口号/数据库名?参数=参数值

MySQL格式

MySQL简写格式

前提:必须是本地服务器,端口号是 3306 。

简写格式:jdbc:mysql:///数据库名

乱码的处理

如果数据库出现乱码,可以指定参数: ?characterEncoding=utf8,表示让数据库以 UTF-8 编码来处理数据。

jdbc:mysql://localhost:3306/数据库?characterEncoding=utf8

2.5-代码演示

方式1:使用用户名、密码、URL 得到连接对象

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
* 得到连接对象
*/
public class Demo2 {
   
 public static void main(String[] args) throws SQLException {
   
     String url = "jdbc:mysql://localhost:3306/db3";
     //1) 使用用户名、密码、URL 得到连接对象
     Connection connection = DriverManager.getConnection(url, "root", "root");
     //com.mysql.jdbc.JDBC4Connection@68de145
     System.out.println(connection);
 }
}

方式2:使用属性文件和 url 得到连接对象

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class Demo3 {
   
 public static void main(String[] args) throws SQLException {
   
     //url 连接字符串
     String url = "jdbc:mysql://localhost:3306/db3";
     //属性对象
     Properties info = new Properties();
     //把用户名和密码放在 info 对象中
     info.setProperty("user","root");
     info.setProperty("password","root");
     Connection connection = DriverManager.getConnection(url, info);
     //com.mysql.jdbc.JDBC4Connection@68de145
     System.out.println(connection);
 }
}

第三章:Connection接口

作用

Connection 接口,具体的实现类由数据库的厂商实现,代表一个连接对象。

方法

方法 描述
Statement createStatement() 创建一条 SQL 语句对象

第四章:Statement 接口

4.1-JDBC访问数据库的步骤

  1. 注册和加载驱动(可以省略)
  2. 获取连接
  3. Connection Statement 对象
  4. 使用 Statement 对象执行 SQL 语句
  5. 返回结果集
  6. 释放资源

4.2-Statement 作用

代表一条语句对象,用于发送 SQL 语句给服务器,用于执行静态 SQL 语句并返回它所生成结果的对象。

4.3-Statement 中的方法

Statement 接口中的方法 描述
int executeUpdate(String sql) 用于发送 DML 语句,增删改的操作(insert、update、delete) 参数:SQL 语句 返回值:返回对数据库影响的行数
ResultSet executeQuery(String sql) 用于发送 DQL 语句,执行查询的操作。 select 参数:SQL 语句 返回值:查询的结果集

4.4-释放资源

  1. 需要释放的对象:ResultSet 结果集,Statement 语句,Connection 连接
  2. 释放原则:先开的后关,后开的先关。ResultSet →Statement →Connection
  3. 放在哪个代码块中:finally 块

4.5-执行DDL

需求:使用 JDBC 在 MySQL 的数据库中创建一张学生表

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
/**
* 创建一张学生表
*/
public class Demo4DDL {
   
 public static void main(String[] args) {
   
     //1. 创建连接
     Connection conn = null;
     Statement statement = null;
     try {
   
         conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", "root");
         //2. 通过连接对象得到语句对象
         statement = conn.createStatement();
         //3. 通过语句对象发送 SQL 语句给服务器
         //4. 执行 SQL
         statement.executeUpdate("create table student (id int PRIMARY key auto_increment, " +
         "name varchar(20) not null, gender boolean, birthday date)");
         //5. 返回影响行数(DDL 没有返回值)
         System.out.println("创建表成功");
     } catch (SQLException e) {
   
    	 e.printStackTrace();
     }
     //6. 释放资源
     finally {
   
         //关闭之前要先判断
         if (statement != null) {
   
         try {
   
        	 statement.close();
         } catch (SQLException e) {
   
         	e.printStackTrace();
         }
          }
         if (conn != null) {
   
             try {
   
             	conn.close();
             } catch (SQLException e) {
   
            	 e.printStackTrace();
             }
         }
     }
 }
}

4.6-执行DML

需求

向学生表中添加 4 条记录,主键是自动增长

步骤

  1. 创建连接对象
  2. 创建 Statement 语句对象
  3. 执行 SQL 语句:executeUpdate(sql)
  4. 返回影响的行数
  5. 释放资源

代码

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
/**
* 向学生表中添加 4 条记录,主键是自动增长
*/
public class Demo5DML {
   
 public static void main(String[] args) throws SQLException {
   
    // 1) 创建连接对象
     Connection connection = DriverManager.getConnection("jdbc:mysql:///day24", "root",
    "root");
    // 2) 创建 Statement 语句对象
     Statement statement = connection.createStatement();
    // 3) 执行 SQL 语句:executeUpdate(sql)
     int count = 0;
    // 4) 返回影响的行数
     count += statement.executeUpdate("insert into student values(null, '孙悟空', 1, '1993-03-
    24')");
     count += statement.executeUpdate("insert into student values(null, '白骨精', 0, '1995-03-
    24')");
     count += statement.executeUpdate("insert into student values(null, '猪八戒', 1, '1903-03-
    24')");
     count += statement.executeUpdate("insert into student values(null, '嫦娥', 0, '1993-03-
    11')");
     System.out.println("插入了" + count + "条记录");
    // 5) 释放资源
     statement.close();
     connection.close();
 }
}

4.7-执行DQL

ResultSet 接口

作用:封装数据库查询的结果集,对结果集

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值