news 2026/6/10 17:55:14

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/6/10 12:27:40

OrcaSlicer:FDM 3D打印的终极切片软件指南

OrcaSlicer&#xff1a;FDM 3D打印的终极切片软件指南 【免费下载链接】OrcaSlicer G-code generator for 3D printers (Bambu, Prusa, Voron, VzBot, RatRig, Creality, etc.) 项目地址: https://gitcode.com/GitHub_Trending/orc/OrcaSlicer OrcaSlicer 是一款专为FDM…

作者头像 李华
网站建设 2026/6/10 0:48:12

Gutenberg版本升级终极指南:从0.6到0.7的完整迁移教程

Gutenberg版本升级终极指南&#xff1a;从0.6到0.7的完整迁移教程 【免费下载链接】Gutenberg Modern framework to print the web correctly.                                                项目地址: https://gitcode.c…

作者头像 李华
网站建设 2026/6/10 12:28:02

Visual C++ 6.0终极指南:Windows 11简单配置与性能优化

Visual C 6.0终极指南&#xff1a;Windows 11简单配置与性能优化 【免费下载链接】VisualC6.0中文版安装包及Win11安装教程 本资源文件提供了Visual C 6.0&#xff08;简称VC6.0&#xff09;中文版的安装包下载及在Windows 11系统下的安装教程。VC6.0是一款经典的C开发工具&…

作者头像 李华
网站建设 2026/6/10 12:34:26

OSS-Fuzz实战指南:从入门到精通的持续模糊测试体系

OSS-Fuzz实战指南&#xff1a;从入门到精通的持续模糊测试体系 【免费下载链接】oss-fuzz OSS-Fuzz - continuous fuzzing for open source software. 项目地址: https://gitcode.com/gh_mirrors/oss/oss-fuzz 引言&#xff1a;现代软件安全的守护者 在数字化时代浪潮中…

作者头像 李华
网站建设 2026/6/10 10:27:26

GSV6125@ACP#6125产品规格详解及产品应用分享

一、产品核心定位与通用信息核心属性规格详情产品类型HDMI 2.0 接收端&#xff08;Rx&#xff09;→ Type-C DisplayPort 1.4 发送端&#xff08;Tx&#xff09;转换器核心集成模块增强型 MCU&#xff08;微控制器&#xff09;、Type-C CC&#xff08;通道配置&#xff09;控制…

作者头像 李华
网站建设 2026/6/10 10:28:08

3步构建企业级实时数据处理流水线

3步构建企业级实时数据处理流水线 【免费下载链接】emqx The most scalable open-source MQTT broker for IoT, IIoT, and connected vehicles 项目地址: https://gitcode.com/gh_mirrors/em/emqx 在现代应用开发中&#xff0c;实时数据处理已成为提升业务响应速度的关键…

作者头像 李华