news 2026/5/1 1:04:08

Java 与 Python 操作 MySQL 完全指南:从基础连接到连接池优化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java 与 Python 操作 MySQL 完全指南:从基础连接到连接池优化

在后端开发中,MySQL 作为主流关系型数据库,其与编程语言的高效连接是数据交互的核心。本文将详细讲解 Java 和 Python 两种语言操作 MySQL 的完整流程,从基础连接、SQL 执行,到连接池优化(重点解析 HikariCP 和 Druid),帮你轻松搞定数据库交互需求。

一、Python 操作 MySQL:简洁高效的 pymysql 实战

Python 通过pymysql库实现与 MySQL 的交互,语法简洁,适合快速开发和脚本编写。

1. 环境准备

首先安装第三方依赖库:

bash

运行

pip install pymysql

2. 核心操作流程

Python 操作 MySQL 的核心步骤为:创建连接→创建游标→执行 SQL→处理结果→关闭资源,完整示例如下:

python

运行

import pymysql # 1. 创建数据库连接 # 核心参数:主机地址、端口、用户名、密码、目标数据库 conn = pymysql.connect( host='localhost', # 本地主机可填'localhost',远程需填IP port=3306, # MySQL默认端口3306 user='root', # 数据库用户名 passwd='123456', # 数据库密码 db='stu_test' # 要操作的数据库名称 ) # 2. 创建游标(用于执行SQL语句) cursor = conn.cursor() try: # 3. 执行SQL语句(查询示例) sql = ''' SELECT t1.sid, t1.sname, t2.score FROM ( SELECT sid, sname FROM Student WHERE sid IN ( SELECT t1.sid FROM (SELECT sid, score FROM SC WHERE cid = '01') t1 LEFT JOIN (SELECT sid, score FROM SC WHERE cid = '02') t2 ON t1.sid = t2.sid WHERE t1.score > IFNULL(t2.score, 0) ) ) t1 LEFT JOIN SC t2 ON t1.sid = t2.sid ''' cursor.execute(sql) # 执行SQL # 4. 处理查询结果 print("获取单条数据:", cursor.fetchone()) # 取1条结果 print("-" * 50) print("获取剩余所有数据:", cursor.fetchall()) # 取剩余全部结果 print("-" * 50) print("获取指定条数数据:", cursor.fetchmany(10)) # 取指定数量结果 # 增删改操作需提交事务 # sql_insert = "INSERT INTO Student(sid, sname) VALUES ('001', '张三')" # cursor.execute(sql_insert) # conn.commit() # 提交事务 # conn.rollback() # 异常时回滚 except Exception as e: print("SQL执行失败:", str(e)) finally: # 5. 关闭资源(先关游标,再关连接) cursor.close() conn.close()

3. 关键注意事项

  • 执行增删改操作后必须调用conn.commit()提交事务,否则修改不生效;
  • 异常场景下需调用conn.rollback()回滚事务,避免数据不一致;
  • 游标获取结果后,指针会移动,fetchone()/fetchall()/fetchmany(n)需按需使用。

二、Java 操作 MySQL:JDBC 基础连接

Java 通过 JDBC(Java Database Connectivity)规范实现与 MySQL 的连接,是 Java 操作数据库的标准方式,适用于企业级应用开发。

1. 环境准备

添加 MySQL 驱动依赖(Maven 项目):

xml

<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.49</version> <!-- 稳定版本,适配多数场景 --> </dependency>

2. JDBC 核心操作流程

JDBC 操作分为 6 步:加载驱动→创建连接→创建执行器→执行 SQL→处理结果→关闭资源,完整示例:

java

运行

package com.shujia; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class MySQLJDBCDemo { public static void main(String[] args) throws Exception { // 1. 加载MySQL驱动(MySQL 5.x版本驱动类) Class.forName("com.mysql.jdbc.Driver"); // 2. 创建数据库连接 // URL格式:jdbc:mysql://主机:端口/数据库名?参数 String url = "jdbc:mysql://localhost:3306/db1?useSSL=false"; String username = "root"; String password = "123456"; Connection conn = DriverManager.getConnection(url, username, password); // 3. 创建Statement执行器(用于执行SQL语句) Statement st = conn.createStatement(); // 4. 执行查询SQL,返回结果集 String sql = "SELECT * FROM student"; ResultSet rs = st.executeQuery(sql); // 5. 遍历结果集 while (rs.next()) { int id = rs.getInt("id"); // 按列名获取int类型 String name = rs.getString("name");// 按列名获取String类型 int age = rs.getInt("age"); String gender = rs.getString("gender"); String clazz = rs.getString("clazz"); System.out.printf("%d,%s,%d,%s,%s%n", id, name, age, gender, clazz); } // 6. 关闭资源(逆序关闭:ResultSet→Statement→Connection) rs.close(); st.close(); conn.close(); } }

3. JDBC 核心要点

  • URL 参数useSSL=false:关闭 SSL 连接,避免开发环境 SSL 验证报错;
  • 结果集ResultSet需通过rs.next()移动指针,初始指针在第一条数据前;
  • 资源关闭必须执行,否则会导致数据库连接泄露,建议用try-with-resources自动关闭。

三、连接池优化:解决 JDBC 性能瓶颈

1. 为什么需要连接池?

传统 JDBC 每次操作数据库都要创建和关闭连接,存在两大问题:

  • 性能开销大:连接创建 / 关闭是耗时操作,频繁执行会严重影响系统性能;
  • 资源泄露风险:未及时关闭的连接会占用数据库资源,导致资源耗尽;
  • 连接池通过 “缓存连接” 实现资源重用,解决上述问题,核心优势:
    • 资源重用:连接复用,减少创建 / 关闭开销;
    • 响应更快:预初始化连接,无需等待连接创建;
    • 统一管理:控制最大连接数,避免资源独占;
    • 防止泄露:超时自动回收空闲连接。

2. 主流连接池对比

连接池核心特点性能排名适用场景
HikariCP轻量高效,锁竞争少,SpringBoot2 默认推荐1追求高性能的企业级应用
Druid功能全面,支持 SQL 监控、拦截,扩展性强2需要监控和扩展的复杂应用
tomcat-jdbcTomcat 内置,配置简单,稳定性好3Tomcat 部署的 Web 应用
DBCPApache 出品,Tomcat 早期使用,功能基础4简单应用,不追求极致性能
C3P0历史悠久,代码复杂,性能较差5legacy 系统兼容

3. 实战 1:HikariCP 连接池(高性能首选)

步骤 1:添加 Maven 依赖

xml

<dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>4.0.3</version> <!-- 稳定版本 --> </dependency>
步骤 2:初始化连接池并使用

java

运行

import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; public class HikariCPDemo { public static void main(String[] args) { // 1. 配置连接池参数 HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:mysql://localhost:3306/db1?useSSL=false"); config.setUsername("root"); config.setPassword("123456"); // 核心配置 config.setConnectionTimeout(1000); // 连接超时:1秒 config.setIdleTimeout(60000); // 空闲超时:60秒 config.setMaximumPoolSize(16); // 最大连接数:16(根据CPU核心数调整) config.setMinimumIdle(4); // 最小空闲连接数:4 // 2. 创建连接池实例 HikariDataSource dataSource = new HikariDataSource(config); // 3. 获取连接并操作数据库(try-with-resources自动关闭资源) try (Connection conn = dataSource.getConnection()) { String sql = "SELECT name, age FROM student WHERE id = ?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setInt(1, 1); // 预处理SQL,避免SQL注入 ResultSet rs = pstmt.executeQuery(); if (rs.next()) { System.out.println("姓名:" + rs.getString("name") + ",年龄:" + rs.getInt("age")); } } catch (Exception e) { e.printStackTrace(); } } }

4. 实战 2:Druid 连接池(功能全面)

步骤 1:添加 Maven 依赖

xml

<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.16</version> </dependency>
步骤 2:初始化连接池

java

运行

import com.alibaba.druid.pool.DruidDataSource; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; public class DruidDemo { public static void main(String[] args) throws Exception { // 1. 配置连接池 DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl("jdbc:mysql://localhost:3306/db1?useSSL=false"); dataSource.setUsername("root"); dataSource.setPassword("123456"); dataSource.setMaxActive(16); // 最大连接数 dataSource.setMinIdle(4); // 最小空闲连接 dataSource.setMaxWait(1000); // 最大等待时间 dataSource.setValidationQuery("SELECT 1"); // 连接校验SQL // 2. 获取连接 Connection conn = dataSource.getConnection(); Statement st = conn.createStatement(); ResultSet rs = st.executeQuery("SELECT * FROM student LIMIT 5"); // 3. 处理结果 while (rs.next()) { System.out.println(rs.getString("name")); } // 4. 关闭资源 rs.close(); st.close(); conn.close(); // 归还连接到池,并非真正关闭 } }

四、核心优化建议

  1. 连接池参数调优
    • 最大连接数(maximumPoolSize):建议设为 CPU 核心数 ×2+1,避免连接过多导致数据库压力;
    • 空闲超时(idleTimeout):根据业务场景设置(30-60 秒),避免空闲连接占用资源。
  2. SQL 执行优化
    • Python 使用参数化查询避免 SQL 注入:cursor.execute("INSERT INTO Student VALUES (%s, %s)", ('002', '李四'))
    • Java 使用PreparedStatement替代Statement,预处理 SQL 提升性能并防注入。
  3. 资源关闭规范
    • Python 用finally块强制关闭游标和连接;
    • Java 优先使用try-with-resources自动关闭Connection/Statement/ResultSet

五、总结

  • Python+pymysql:适合快速开发、脚本工具,语法简洁,上手成本低;
  • Java+JDBC:企业级应用标准方案,稳定性强,配合连接池可满足高性能需求;
  • 连接池选择:追求性能选 HikariCP,需要监控和扩展选 Druid;
  • 核心原则:无论哪种语言,都要保证 “资源重用、事务安全、防止注入”,才能实现高效稳定的数据库交互。

掌握以上内容,即可应对大部分开发场景中的 MySQL 操作需求,从简单脚本到企业级应用都能游刃有余。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/26 19:40:23

从零开始掌握diffvg:可微分光栅化器终极指南

从零开始掌握diffvg&#xff1a;可微分光栅化器终极指南 【免费下载链接】diffvg Differentiable Vector Graphics Rasterization 项目地址: https://gitcode.com/gh_mirrors/di/diffvg 想要探索向量图形优化的奥秘吗&#xff1f;diffvg作为一款革命性的可微分光栅化器&…

作者头像 李华
网站建设 2026/4/23 16:06:01

JmalCloud:打造属于你的私有云存储解决方案

JmalCloud&#xff1a;打造属于你的私有云存储解决方案 【免费下载链接】jmal-cloud-view JmalCloud 是一款私有云存储网盘项目&#xff0c;能够简单安全管理您的云端文件 项目地址: https://gitcode.com/gh_mirrors/jm/jmal-cloud-view 在数字化时代&#xff0c;数据安…

作者头像 李华
网站建设 2026/4/25 7:11:40

快速上手libjxl:新一代JPEG XL图像压缩技术完整指南

libjxl是JPEG XL图像格式的官方参考实现&#xff0c;提供了高效的图像压缩和解压功能。作为下一代图像压缩标准&#xff0c;JPEG XL在保持图像质量的同时&#xff0c;能够显著减小文件体积&#xff0c;为网站优化、移动应用和数据存储管理提供强大支持。前100字内必须明确libjx…

作者头像 李华
网站建设 2026/4/29 0:58:48

多模态视觉模型优化与微调实战指南

多模态视觉模型优化与微调实战指南 【免费下载链接】smol-vision 项目地址: https://ai.gitcode.com/hf_mirrors/merve/smol-vision 在人工智能快速发展的今天&#xff0c;多模态视觉模型已成为技术创新的重要方向。本文将从实战角度出发&#xff0c;深入探讨如何对先进…

作者头像 李华
网站建设 2026/4/27 4:12:42

恒源云GPU云端训练YOLOv11全流程教程:低成本实现高精度目标检测

文章目录 恒源云GPU云端训练YOLOv11全流程教程:低成本实现高精度目标检测 一、云端GPU训练为何是YOLOv11的“效率密码” 二、恒源云平台与工具准备:5分钟开启训练之旅 1. 恒源云客户端安装与登录 2. 数据与模型文件上传 三、云端实例创建与环境配置:一键搭建训练“工作站” …

作者头像 李华