JDBC基础知识
2024-07-21 22:08:35

JDBC

JDBC,英文全称为Java Database Connectivity,是Java提供对数据库连接、操作的标准API。

即JDBC是一套API。

Java本身没有实现对数据库连接、查询、更新等操作,而相关的实现由厂商负责,厂商需要实现JDBC定义的接口

img

JDBC库中所包含的API任务通常与数据库使用:

  • 连接到数据库
  • 创建SQL或MySQL语句
  • 在数据库中执行SQL或MySQL查询
  • 查看和修改记录

JDBC Connection

实操素材来自遇见狂神说Java

  • 首先得建一个数据库内容

image-20240611194728081

  • 建一个Maven项目,在porm.xml中导入依赖

image-20240611200454708

  • 在Java中代码实现的过程:
  1. 加载与注册JDBC驱动
  2. 创建Connection对象 => 创建Statement对象 => 创建ResultSet对象

URL格式为:jdbc:mysql://localhost::3306/jdbcStudy

image-20240611200637091

  1. 使用ResultSetgetObject方法来获取对应的值
  2. 倒序释放资源

图示如下:

在这里插入图片描述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package JDBC;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;



public class JDBCFirstDemo {

public static void main(String[] args) throws Exception{

// 1. 加载mysql的jdbc驱动
Class.forName("com.mysql.jdbc.Driver");

// 2. 用户信息和url
// useUnicode=true 支持中文编码
// characterEncoding=utf8 设定字符集
// useSSL=true 使用安全的连接
String url = "jdbc:mysql://localhost/jdbcStudy?useUnicode=true&characterEncoding=utf8&useSSL=true";
String username = "root";
String password = "icfhadmin";

Connection connection = DriverManager.getConnection(url, username, password);

Statement statement = connection.createStatement();

String sql = "SELECT * FROM users";

ResultSet resultSet = statement.executeQuery(sql);

while(resultSet.next()){
System.out.println("id=" + resultSet.getObject("ID" ));
System.out.println("name=" + resultSet.getObject("NAME"));
System.out.println("pwd=" + resultSet.getObject("PASSWORD"));
System.out.println("email=" + resultSet.getObject("email"));
System.out.println("both=" + resultSet.getObject("birthday"));
}

resultSet.close();
statement.close();
connection.close();
}
}

执行可以发现获取了数据库的对应字段

image-20240611200532286

Java特性在此过程中的体现

Class.forName在此过程中的作用

​ 使用Class.forName会触发类加载,com.mysql.jdbc.Driver类将会被初始化

​ 所以static代码块将会被执行

image-20240611221807744

​ 因此,想要反射某个类又不想初始化类方法有如下途径:

  • 使用Class.forName("xxx", false, loader)方法,第二个参数传入false
  • ClassLoader.load("xxx")

不使用Class.forName也能执行的原因=>SPI

Java SPI机制:JDK内置的一种 服务提供发现机制,可以用来启动框架扩展和替换组件,主要是被框架的开发人员使用,比如java.sql.Driver接口

通俗来说就是会自动发现依赖,然后加载

img

image-20240611223620154

JDBC 数据库配置信息

传统的Web应用的配置信息存放路径

  • WEB-INF目录下的*.properites .yml *.xml
  • Spring boot项目:src/main/resources/

常见的存储数据库配置信息的文件路径

  • WEB-INF/applicationContext.xml
  • WEB-INF/hibernate.cfg.xml
  • WEB-INF/jdbc/jdbc.properties
  • 使用系统命令寻找,如寻找mysql: find 路径 -type f |xargs grep "com.mysql.jdbc.Driver"

参考

https://longlone.top/%E5%AE%89%E5%85%A8/java/JavaWeb%E5%AE%89%E5%85%A8-%E6%96%87%E7%AB%A0%E5%A4%8D%E7%8E%B0/JDBC/

Prev
2024-07-21 22:08:35
Next