-
java 使用Jdbc连接mysql数据库以及其存在的问题
- 网站名称:java 使用Jdbc连接mysql数据库以及其存在的问题
- 网站分类:技术文章
- 收录时间:2025-08-03 01:42
- 网站地址:
“java 使用Jdbc连接mysql数据库以及其存在的问题” 网站介绍
写在前面
jdbc 是 java 中自带的连接数据库的方案。 后续衍生的很多ORM框架, 都是为了解决jdbc存在的问题。 下边是jdbc 连接数据库的一个例子。
连接mysql数据库
整体测试maven项目
jdbctest.zip
建立mysql表
/*
Navicat Premium Data Transfer
Source Server : clean
Source Server Type : MySQL
Source Server Version : 80032
Source Host : 127.0.0.1:3306
Source Schema : clean
Target Server Type : MySQL
Target Server Version : 80032
File Encoding : 65001
Date: 27/05/2025 21:26:21
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for myuser
-- ----------------------------
DROP TABLE IF EXISTS `myuser`;
CREATE TABLE `myuser` (
`id` int(0) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
封装jdbcUtils工具类
package com.clean;
import java.sql.*;
public class JdbcUtils {
// 数据库配置(需根据实际修改)
private static final String URL = "jdbc:mysql://localhost:3306/clean?useSSL=false&serverTimezone=UTC";
private static final String USER = "root";
private static final String PASSWORD = "root";
// 加载驱动(JDBC 4.0+ 可自动加载,此代码可省略)
static {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
throw new RuntimeException("找不到MySQL驱动", e);
}
}
// 获取数据库连接
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(URL, USER, PASSWORD);
}
// 关闭资源
public static void close(Connection conn, Statement stmt, ResultSet rs) {
try {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
User实体类
package com.clean;
public class User {
private int id;
private String name;
// 必须有无参构造函数
public User() {}
public User(int id, String name) {
this.id = id;
this.name = name;
}
// Getters and Setters
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
@Override
public String toString() {
return "User{id=" + id + ", name='" + name + "'}";
}
}
测试类
package com.clean;
import java.sql.*;
public class UserDao {
public User getUserById(int userId) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
User user = null;
try {
// 1. 获取连接
conn = JdbcUtils.getConnection();
// 2. 创建预处理语句
String sql = "SELECT id, name FROM myuser WHERE id = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, userId);
// 3. 执行查询
rs = pstmt.executeQuery();
// 4. 处理结果集
if (rs.next()) {
user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 5. 关闭资源
JdbcUtils.close(conn, pstmt, rs);
}
return user;
}
// 测试代码
public static void main(String[] args) {
UserDao dao = new UserDao();
User user = dao.getUserById(1);
System.out.println(user != null ? user : "未找到用户");
}
}
存在问题
数据库配置信息存在硬编码问题
可以使用配置文件存储这些信息
频繁创建释放数据库连接
数据库连接池解决
sql语句,设置参数,获取结果集参数均存在硬编码问题
使用配置文件解决
手动封装返回结果集,较为繁琐
使用反射,内省解决
写在最后
正是由于 jdbc 存在上述问题, 我们自己可以写一个简单的 框架,来解决这些问题。 这个框架,可以看做是 mybatis 的雏形。
更多相关网站
- 10个SQL优化技巧,性能提升300%(sql优化从哪几方面入手)
- 面试官问你 MySQL 的线上执行 DDL 该怎么做?...
- MySQL 8.0 的隐藏索引:索引管理的利器,还是性能陷阱?
- MySQL实战:Json字段类型详解(mysql中json类型)
- Spring事务失效的12种解决方案!15年踩坑经验浓缩成这份避雷指南
- 面试官:select语句和update语句分别是怎么执行的?
- 详细了解 InnoDB 内存结构及其原理
- 深度剖析 Spring Boot3 中事务失效的场景与解决方案
- 百万订单背后的架构生死局:SpringCloud Alibaba拯救我们的微服务
- 面试官:20 亿手机号存储选 int 还是 string?varchar 还是 char?
- 面试官:MySQL的自增ID用完了,怎么办?
- 别再用雪花算法生成ID了!试试这个吧
- # mysql 中文乱码问题分析(#mysql5.0中文乱码)
- MySQL分页到了后面越来越慢,有什么好的解决办法?
- Spring Boot3 中实现树表结构数据查询及返回全解析
- SQL外连接优化:经过验证的性能提升
- zPaaS低代码平台使用介绍:第一个功能开发
- 面试官:你对索引了解多少,展开说说
- 最近发表
-
- 基于jeecgboot框架的cloud商城源码分享,兼容单体和微服务模式
- 值得学习的15 个优秀开源的 Spring Boot 学习项目
- 基于SpringBoot低代码平台(基于spring boot)
- 火山引擎基于 Zeppelin 的 Flink/Spark 云原生实践
- 十款优质企业级Java微服务开源项目(开源框架,公司项目等)
- 可以直接拿来做项目的开源框架(可以直接拿来做项目的开源框架是什么)
- Github 2024-05-10 Java开源项目日报 Top10
- 推荐这款企业级!物联网平台支持NB-IoT、蜂窝网络等多种接入方式
- 开源的面向中小企业的进销存管理系统
- Jeecgboot3.2版-postgres脚本制作
- 标签列表
-
- mydisktest_v298 (35)
- sql 日期比较 (33)
- document.appendchild (35)
- 头像打包下载 (35)
- 二调符号库 (23)
- acmecadconverter_8.52绿色版 (25)
- 梦幻诛仙表情包 (36)
- 魔兽模型 (23)
- java面试宝典2019pdf (26)
- disk++ (30)
- 加密与解密第四版pdf (29)
- iteye (26)
- centos7.4下载 (32)
- intouch2014r2sp1永久授权 (33)
- usb2.0-serial驱动下载 (24)
- jdk1.8.0_191下载 (27)
- axure9注册码 (30)
- virtualdrivemaster (26)
- 数据结构c语言版严蔚敏pdf (25)
- 兔兔工程量计算软件下载 (27)
- 代码整洁之道 pdf (26)
- ccproxy破解版 (31)
- aida64模板 (28)
- engine=innodb (33)
- shiro jwt (28)