JDBC相关知识点
文章目录
- 一、JDBC概述
- 二、JDBC连接步骤
- 三、驱动程序与第三方依赖
- 四、常见问题处理
- 五、与ODBC的关系
- 六、完整示例代码
- 七、关键概念总结
一、JDBC概述
-
定义
- Java Database Connectivity,Java数据库连接API
- 一套统一的接口(
java.sql
包),由数据库厂商提供实现类(驱动程序)
-
核心接口与类
顶层接口 ├── Driver # 驱动程序接口(厂商实现) ├── Connection # 数据库连接对象 ├── Statement # SQL语句执行对象 │ ├── PreparedStatement # 预编译SQL(防SQL注入) │ └── CallableStatement # 存储过程调用 └── ResultSet # 查询结果集
二、JDBC连接步骤
-
加载驱动类
// MySQL 8.x 驱动 Class.forName("com.mysql.cj.jdbc.Driver");
-
建立连接(TCP/IP)
String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf8"; String username = "root"; String password = "123456"; Connection conn = DriverManager.getConnection(url, username, password);
- URL格式:
jdbc:mysql://[IP地址]:[端口号]/[数据库名]?参数1&参数2
- 常用参数:
useUnicode=true
:启用Unicode支持
characterEncoding=utf8
:设置字符编码(防中文乱码)
- URL格式:
-
创建Statement对象
Statement stmt = conn.createStatement();
-
执行SQL语句
// 执行DML(增删改) int rows = stmt.executeUpdate("INSERT INTO users VALUES (1, '张三')");// 执行查询 ResultSet rs = stmt.executeQuery("SELECT * FROM users"); while (rs.next()) {int id = rs.getInt("id");String name = rs.getString("name"); }
-
关闭资源(反向关闭)
rs.close(); stmt.close(); conn.close();
三、驱动程序与第三方依赖
-
驱动分类
- JDBC-ODBC桥(早期):通过ODBC访问数据库
- 纯Java驱动(主流):如MySQL的
mysql-connector-java
-
添加依赖
- Maven项目:在
pom.xml
中添加:<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.26</version> </dependency>
- 非Maven项目:手动下载JAR包并添加到类路径
- Maven项目:在
四、常见问题处理
-
中文乱码
- 数据库表字符集设置为
utf8mb4
- JDBC URL添加参数:
?useUnicode=true&characterEncoding=utf8
- 数据库表字符集设置为
-
端口号冲突
- MySQL默认端口:3306
- 查看端口占用:
netstat -ano | grep 3306
- 修改MySQL端口:编辑
my.cnf
配置文件
五、与ODBC的关系
- ODBC(Open Database Connectivity):微软推出的跨平台数据库访问标准(C语言接口)
- JDBC与ODBC对比:
特性 JDBC ODBC 语言 Java专用 跨语言(C/C++为主) 驱动 纯Java实现 需本地库支持 应用场景 Java应用程序 跨平台应用
六、完整示例代码
import java.sql.*;public class JdbcExample {public static void main(String[] args) {String url = "jdbc:mysql://localhost:3306/mydb";String user = "root";String password = "123456";try (Connection conn = DriverManager.getConnection(url, user, password);Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery("SELECT * FROM users")) {while (rs.next()) {System.out.println("ID: " + rs.getInt("id") +", Name: " + rs.getString("name"));}} catch (SQLException e) {e.printStackTrace();}}
}
七、关键概念总结
- 接口回调:JDBC通过接口定义标准,厂商实现具体逻辑(如
Driver
接口) - 端口号作用:标识主机上的特定进程(如MySQL服务监听3306端口)
- 反向关闭原则:后创建的资源先关闭(ResultSet → Statement → Connection)