搜索

java连接mysql数据库

发表于 2026-10-17 06:15:54 来源:烟消火灭网

拿JDBC直连MySQL,连接代码量不大,据库但坑都在细节里。连接先看最核心的据库几行:

Class.forName("com.mysql.cj.jdbc.Driver"); Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC", "root", "password" );

第一行加载驱动,第二行建立连接。连接就这么简单?据库对,但前提是连接你得先把mysql-connector-java的jar包扔进classpath。Maven项目就加个依赖,据库Gradle同理,连接手动导包的据库话记得别放错地方——我见过有人把jar丢在桌面然后报ClassNotFoundException,查了半天。连接

连接串里的据库参数别乱删。useSSL=false是连接本地开发常用的,生产环境你得上证书。据库serverTimezone=UTC是连接MySQL 8.0以后的硬性要求,不加会报时区错误,那报错信息长得像外星文,实际就缺这俩参数。

拿到Connection之后,下一步是Statement还是PreparedStatement?直接说结论:永远用PreparedStatement。不是因为它能防SQL注入这种老生常谈,而是它处理参数、日期、特殊字符时省心得多。举个我踩过的例子——往表里插一条带单引号的数据,用Statement拼字符串直接语法错误,换成PreparedStatement的setString(),啥事没有。

String sql = "INSERT INTO users(name, age) VALUES(?, ?)"; PreparedStatement ps = conn.prepareStatement(sql); ps.setString(1, "张三"); ps.setInt(2, 25); ps.executeUpdate();

这几行代码看着简单,但有个隐藏雷区——连接用完必须关。别偷懒不写finally块,也别用旧式的conn.close()裸奔。Java 7以后有try-with-resources,语法长这样:

try (Connection conn = getConnection(); PreparedStatement ps = conn.prepareStatement(sql)) {  // 执行操作 } catch (SQLException e) {  e.printStackTrace(); }

这样写,连接和语句自动关闭,不用手动清理。但注意,如果你在循环里反复开连接,那性能会烂到没法看——每次new Connection都要握手、鉴权、建会话,开销几十毫秒起步。这时候得用连接池,HikariCP是首选,配置也就几行:

HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:mysql://localhost:3306/testdb"); config.setUsername("root"); config.setPassword("password"); HikariDataSource ds = new HikariDataSource(config);

然后从ds.getConnection()拿连接,用完还回去就行,池子自己管生命周期。

最后说个很多人忽略的——查询结果集遍历。ResultSet默认只能向前滚动,但有些人想用rs.last()获取行数,直接报错。解决方法是创建语句时加参数:

stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

或者干脆别纠结行数,用rs.next()循环加计数器,性能还更好。

写完这些,连接数据库的基本操作就齐了。剩下的异常处理、事务控制、批量插入,都是在这个骨架上添砖加瓦。代码跑起来的那一刻,你就能真正理解Java和MySQL之间那层薄薄的协议是怎么通过JDBC翻译成SQL指令的。

随机为您推荐
友情链接
版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

Copyright © 2016 Powered by java连接mysql数据库,烟消火灭网   sitemap

回顶部