【Java】如何使用jdbc连接并操作MySQL,一文读

JDBC连接MySQL的基本步骤

下载并导入MySQL JDBC驱动

从MySQL官网或Maven仓库获取mysql-connector-java的jar包,版本需与MySQL服务端匹配。若使用Maven项目,在pom.xml中添加依赖:

XML 复制代码
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.28</version>
</dependency>

注册JDBC驱动并建立连接

通过Class.forName()加载驱动,使用DriverManager.getConnection()建立连接。连接URL格式为jdbc:mysql://主机:端口/数据库名,需提供用户名和密码:

java 复制代码
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection(
    "jdbc:mysql://localhost:3306/testdb", "username", "password");

执行SQL操作

创建Statement对象

通过Connection对象的createStatement()方法创建StatementPreparedStatement。推荐使用预编译语句防止SQL注入:

java 复制代码
PreparedStatement pstmt = conn.prepareStatement(
    "INSERT INTO users(name, age) VALUES(?, ?)");
pstmt.setString(1, "Alice");
pstmt.setInt(2, 25);

执行查询或更新

查询使用executeQuery()返回ResultSet,更新操作使用executeUpdate()返回受影响行数:

java 复制代码
ResultSet rs = pstmt.executeQuery("SELECT * FROM users");
while (rs.next()) {
    System.out.println(rs.getString("name"));
}
int rows = pstmt.executeUpdate();

结果集处理与资源释放

遍历ResultSet获取数据

通过ResultSetgetXXX()方法按列名或索引获取数据,注意不同数据类型的对应方法:

java 复制代码
while (rs.next()) {
    int id = rs.getInt("id");
    String name = rs.getString(2); // 第二列
}

关闭资源

finally块或使用try-with-resources确保关闭连接、语句和结果集:

java 复制代码
try (Connection conn = DriverManager.getConnection(url, user, pass);
     Statement stmt = conn.createStatement()) {
    // 操作代码
} catch (SQLException e) {
    e.printStackTrace();
}

事务管理与异常处理

启用事务

通过setAutoCommit(false)关闭自动提交,显式调用commit()rollback()

java 复制代码
conn.setAutoCommit(false);
try {
    // 批量操作
    conn.commit();
} catch (SQLException e) {
    conn.rollback();
}

异常处理

捕获SQLException并处理特定错误代码(如主键冲突):

java 复制代码
try {
    // JDBC操作
} catch (SQLIntegrityConstraintViolationException e) {
    System.out.println("数据约束冲突");
} catch (SQLException e) {
    e.printStackTrace();
}

连接池优化

使用HikariCP等连接池

配置连接池参数替代直接创建连接,提升性能:

java 复制代码
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost/testdb");
config.setUsername("user");
config.setPassword("pass");
HikariDataSource ds = new HikariDataSource(config);
Connection conn = ds.getConnection();
相关推荐
secondyoung14 天前
Git使用:Git使用问题及解决方法总结
windows·经验分享·git·vscode·gitee·github·gitcode
承渊政道14 天前
Linux系统学习【深入剖析Git的原理和使用(下)】
linux·服务器·git·学习·gitee·vim·gitcode
LeoZY_19 天前
开源项目精选: lazygit —— 告别繁琐命令,终端里玩转可视化Git
git·stm32·单片机·mcu·开源·远程工作·gitcode
猫头虎21 天前
Gitea 服务器搭建:如何在公司服务器搭建 Gitea 环境实现代码仓库私有化托管
运维·服务器·git·github·ai编程·gitea·gitcode
叶庭云22 天前
GitCode 与 GitHub 平台能力深度对比:聚焦于 AI 辅助开发与 Agent 自动化能力
人工智能·github·gitcode·源代码托管平台·ai 辅助开发·agent 自动化能力·易用性
岱宗夫up25 天前
.env 文件是干啥的?为什么不能提交到 Git?
大数据·git·elasticsearch·搜索引擎·gitee·github·gitcode
wei_shuo1 个月前
「源力觉醒 创作者计划」_百度开源文心 4.5 系列开源大模型:ERNIE-4.5-VL-28B-A3B-Paddle vs DeepSeek-R1 多维度测评分析
百度·开源·文心大模型·gitcode
不做无法实现的梦~1 个月前
使用ros2跑mid360的fastlio2建图
git·单片机·嵌入式硬件·gitcode
熊猫钓鱼>_>1 个月前
【开源鸿蒙跨平台开发先锋训练营】DAY 2 React Native for OpenHarmony 开发笔记与实战指南
react native·开源·harmonyos·arkts·openharmony·gitcode·atomgit
时光慢煮1 个月前
Flutter 编译开发 OpenHarmony 全流程实战教程-基于开源仓库GitCode 搜索工具 v1.0.3 的跨平台实践
flutter·开源·gitcode