JBDC入门学习
一、概述
1. 什么是 JDBC?
JDBC(Java Database Connectivity)是 Java 提供的一套用于操作数据库的 API。通过 JDBC,开发者可以使用 Java 代码与各种关系型数据库进行交互,包括执行 SQL 查询、更新数据以及管理事务。
2. JDBC 的核心组成
- DriverManager:用于加载和管理数据库驱动。
- Connection:表示与数据库的连接。
- Statement:用于执行静态 SQL 语句。
- PreparedStatement:用于执行带参数的预编译 SQL 语句。
- ResultSet:表示数据库查询的结果集。
- SQLException:处理 SQL 执行中的异常。
二、入门程序分析
简单的用户查询:
引入依赖:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JDBCDemo {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/your_database";
String username = "your_username";
String password = "your_password";
try {
// 加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 建立连接
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("User ID: " + resultSet.getInt("id"));
System.out.println("Username: " + resultSet.getString("username"));
}
// 关闭资源
resultSet.close();
statement.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
DriverManager注册驱动详解:
// 加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException e) {
throw new RuntimeException("Can't register driver!");
}
}
}
注册驱动:
- 机制:当加载 Driver 驱动类时,会自动运行静态代码块中注册驱动的代码。
- 说明:
Class.forName()
这一步操作可以省略。- 注册驱动是通过 SPI(Service Provider Interface)机制完成的。
- 在驱动包的META-INF目录下的配置文件中配置了驱动类的全类名
SPI 机制:
- 全称:Service Provider Interface
- 作用:JDK 内置的一种服务提供发现机制,可以轻松的扩展程序(切换实现),实现接口与实现类之间的解耦。
获取数据库连接DriverManager.getConnection:
通过 DriverManager.getConnection(url, user, password)
方法获取数据库连接
// 建立连接
String url = "jdbc:mysql://localhost:3306/your_database";
Connection connection = DriverManager.getConnection(url, username, password);
语法:
jdbc:mysql://<ip地址或域名>:<端口号>/<数据库名>?<参数键值对1>&<参数键值对2>
Connection & Statement:
// 建立连接
Connection connection = DriverManager.getConnection(url, username, password);
Connection 的作用:获取执行 SQL 的对象
- 执行普通 SQL 对象:
connection.createStatement()
- 执行预编译 SQL 对象:
connection.prepareStatement(sql)
Statement 的作用:执行 SQL
- 执行 DDL、DML 语句:
executeUpdate(sql)
- 如果执行的是 DML 语句(如
INSERT
、UPDATE
、DELETE
),返回值为int
,表示 DML 语句影响的行数。
- 如果执行的是 DML 语句(如
- 执行 SQL 查询语句:
executeQuery(sql)
- 返回值为
ResultSet
,其中封装了查询结果。
- 返回值为
while (resultSet.next()) {
System.out.println("User ID: " + resultSet.getInt("id"));
System.out.println("Username: " + resultSet.getString("username"));
}
ResultSet(结果集对象):
封装了 DQL 查询语句查询的结果。
-
next()
:- 将光标从当前位置向前移动一行,并判断当前行是否为有效行。
- 返回值:
true
:有效行,当前行有数据。false
:无效行,当前行没有数据。
-
getXxx(…)
:- 获取数据,可以根据列的编号获取,也可以根据列名获取(推荐使用列名)。
PreparedStatement:
作用:预编译SQL语句并执行,可以防止SQL注入问题。
SQL注入:通过控制输入来修改事先定义好的SQL语句,以达到执行代码对服务器进行攻击的方法。
通过 PreparedStatement 解决 SQL 注入问题:
1. 获取 PreparedStatement 对象
使用 ?
占位符替代 SQL 语句中的参数值。
PreparedStatement ps =
connection.prepareStatement("select * from emp where username = ? and password = ?");
// 创建 PreparedStatement 对象
PreparedStatement ps = connection.prepareStatement(sql);
// 设置占位符的值
ps.setString(1, inputUsername); // 设置第一个 ? 为用户名
ps.setString(2, inputPassword); // 设置第二个 ? 为密码
// 执行查询
ResultSet resultSet = ps.executeQuery();
预编译SQL的优势:
1. 安全(防止SQL注入)
2. 性能更高
三、总结
JDBC(Java Database Connectivity)是一种 Java API,用于连接和操作数据库。通过 JDBC,我们可以在 Java 程序中实现对数据库的增删改查操作。
原文地址:https://blog.csdn.net/zzb1580/article/details/143884515
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!