JDBC简介

Java Database Connectivity,简称JDBC,Java数据库连接,是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法

JDBC体系结构

JDBC API支持用于数据库访问的两层和三层处理模型
JDBC API使用驱动程序管理器和特定于数据库的驱动程序来提供与异构数据库的透明连接
JDBC体系结构通常由两层组成

  • JDBC API:提供应用程序到JDBC管理器连接
  • JDBC驱动程序API:支持JDBC管理器到驱动程序连接

image.png

JDBC核心组件

image.png

使用步骤

导入包
需要包含包含数据库编程所需的JDBC类的包
(大多数情况下,使用import java.sql.
注册JDBC驱动程序
初始化驱动程序,以便可以打开与数据库的通信通道
打开连接
使用DriverManager.getConnection()方法创建一个Connection对象,表示与数据库的物理连接
执行查询
使用类型为Statement的对象来构建和提交SQL语句到数据库
从结果集中提取数据
使用相应的ResultSet.getXXX()方法从结果集中检索数据
*释放资源

关闭所有数据库资源,而不依赖于JVM的GC

建立连接

1、 导入JDBC包
import java.sql.*;

2、 注册JDBC驱动程序
使JVM将所需的驱动程序实现加载到内存中,以便满足JDBC请求

image.png

  • 方法一:Class.forName();
    注册驱动程序最常见的方法是使用Java的Class.forName()方法,将驱动程序的类文件动态加载到内存中,并将其自动注册

Class.forName(“com.mysql.cj.jdbc.Driver”);

  • 方法二:DriverManager.registerDriver();
    使用静态DriverManager.registerDriver()方法

3、 数据库URL配置
“jdbc:mysql://localhost:3306/数据库名?serverTimezone=UTC”

4、 创建连接对象
加载驱动程序后,使用DriverManager.getConnection()方法建立数据库连接

String userName = “root”;
String passWord = “123456”;
Connection connection = DriverManager.getConnection(url, userName, passWord);

5、 关闭数据库
为确保连接关闭,可以在代码中提供一个“finally”块

Statement(状态通道)

image.png

连接sql后,创建状态通道(进行sql语句的发送)

sql注入

简介
sql注入攻击是通过将恶意的Sql查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击,是目前黑客对数据库进行攻击最常用手段之一

代码示例:
字符串username和password连接到sql后得到查询语句select * from users where username = ’admin‘ and password= ’abc‘ or 1=1
不管前面是否查询到数据,后面1=1恒为true,因此当通过此来查询用户名和密码进行登录时永远能登录成功

避免sql注入(preparedStatement预状态通道)

PreparedStatement接口扩展了Statement接口,提供了一个通用的Statement对象,动态地提供参数

image.png
占位符:?
先占位,然后通过setXXX(index,vavle)方法对占位符进行赋值(XXX为数据类型,index从1开始)

注意:PreparedStatement在处理值的时候用字符串处理,如果密码为int类型,则再给占位符赋值的时候需要setInt,并且进行强转。

例如:PASSWORD
image.png

JAVA操作两表关系

多表操作首先要建立多表关系,再进行数据处理
两表操作有以下四种关系:
双向一对一:任意一方有对方的一个对象(例如丈夫和妻子) 逻辑同多对一
一对多:在”一“方创建存储”多“方数据的集合;(例如一个老师对应多个学生)
多对一:在“多”方创建一个存储“一”方的对象;(例如多个学生对应一个老师)
多对多:在任意一方创建对方的数据的集合;(例如学生和科目) 逻辑同一对多
建立两表关系:
数据库通过外键建立两表关系
实体类通过属性的方式建立两表关系
实体类要求:
类名=表名
列名=属性名

[

](https://blog.csdn.net/m0_50609545/article/details/119731446)

[

](https://blog.csdn.net/m0_50609545/article/details/119731446)