当前位置: 首页 > news >正文

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

JDBC连接MySQL的基本步骤

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

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version>
</dependency>

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

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

执行SQL操作

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

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

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

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

结果集处理与资源释放

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

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

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

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

事务管理与异常处理

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

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

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

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

连接池优化

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

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();

http://www.dtcms.com/a/552822.html

相关文章:

  • SSM宠物寄养系统ih041gj7(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 网站广告素材php网站免费模板
  • 还在用JDK8?JDK8升级JDK11:一次价值千万的升级指南
  • 深圳网站建设模板乐云seo与设计行业相关的网站
  • 缓存异常:缓存穿透、缓存击穿、缓存雪崩
  • 【计算机网络】IO复用方法(二)——Select
  • 【Java EE进阶 --- SpringBoot】统一功能处理(拦截器)
  • 主流数据分析工具全景对比:Excel / Python / R / Power BI / Tableau / Qlik / Snowflake
  • 从被动防御到主动管控:雷池SafeLine的远程安全运营之道
  • 人体静电消除器安全设计 蒙冬智能
  • 我想要个网站深圳最新招聘
  • Hybrid OCR-LLM框架用于在大量复杂密集企业级文档信息提取
  • 仙居做网站在哪里做项目网格化管理方案
  • ubuntu部署whisper+speaker_large+qwen【一】
  • 四大主流平台深度测评:2025企业自动化运维平台选型指南,自动化巡检平台适配关键场景
  • 计算机毕业设计 基于Python的热门游戏推荐系统的设计与实现 Django 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试】
  • 每周读书与学习->JMeter主要元件详细介绍(三)逻辑控制器
  • QML学习笔记(四十八)QML与C++交互:QML中可实例化C++对象
  • 深信服上网行为 SANGFOR_AC_v11.0_AD域密码认证配置
  • RKNN-Toolkit2入门
  • 服务器公网IP、私网IP、弹性IP是什么?区别与应
  • 无锡哪家做网站好怎么做公司网站文案
  • php做网站架构图建站时候源码有验证怎么办
  • 10. 引用计数
  • 利用DeepSeek辅助改写luadbi-duckdb支持日期和时间戳数据类型
  • 用 Redis 的 List 存储库存队列,并通过 LPOP 原子性出队来保证并发安全案例
  • 定制开发开源AI智能名片S2B2C商城系统:新零售革命下云零售模式的创新实践
  • WebForms Validation
  • AI智能办公系统/企业OA办公/DeepSeek办公应用★pc/公众号/H5/App/小程序
  • 破局冷轧困境:RFID 赋能钢厂高效安全升级