JDBC

JDBC

JDBC 是 Java 提供的一套用于连接和操作关系型数据库的标准 API。允许 Java 程序通过 SQL 语句与数据库进行交互,而无需关心底层数据库的具体实现(只要数据库提供对应的 JDBC 驱动)

一、核心接口

1. Connection(连接)

作用:

表示应用程序与数据库之间的会话连接。

  • 是所有数据库操作的起点:通过 Connection 可以创建 StatementPreparedStatement 等对象。
  • 负责管理事务(比如提交 Commit,回滚 rollback()
1
2
sql::mysql::MySQL_Driver* driver = sql::mysql::get_mysql_driver_instance();
auto* con = driver->connect(url_, user_, pass_);

2. Statement(语句)

作用:用于执行静态 SQL 语句(即不带参数的 SQL),适用于执行 DDL(如 CREATE TABLE)或简单查询

1
2
std::unique_ptr<sql::Statement> stmt(con->_con->createStatement());
stmt->executeQuery("SELECT 1");

该接口容易发生 SQL 注入,每次执行都需要重新编译 SQL(效率较低)

3. PreparedStatement(预编译语句)

继承自 Statement,作用:

  • 执行带参数的预编译 SQL 语句
  • SQL 语句中使用 ? 作为占位符,参数通过 setXxx() 方法设置
1
2
3
4
5
6
// 准备调用存储过程
unique_ptr <sql::PreparedStatement> stmt(con->prepareStatement("CALL reg_user(?,?,?,@result)"));
// 设置输入参数
stmt->setString(1, name);
stmt->setString(2, email);
stmt->setString(3, pwd);

解决了 statement 的问题,防止 SQL 注入,同时性能更高:SQL 语句在数据库端预编译,多次执行时只需替换参数,无需重复解析。

4. ResultSet(结果集)

作用:

  • 表示执行查询(SELECT)后返回的数据结果集合

  • 类似一个“游标”,初始位置在第一行之前,通过 next() 向下移动

1
2
3
4
5
6
7
unique_ptr<sql::ResultSet> res(stmtResult->executeQuery("SELECT @result AS result"));
if (res->next()) {
int result = res->getInt("result");
cout << "Result: " << result << endl;
pool_->returnConnection(std::move(con));
return result;
}

只能向前遍历(默认情况下),同时必须在 ConnectionStatement 关闭前读取数据。


JDBC
https://dxblacksmith.github.io/2026/02/04/JDBC/
作者
DxBlackSmith
发布于
2026年2月4日
许可协议