怎么连接java和数据库
Java连数据库,连接说到底就两步:拿到连接,和数执行SQL。据库但这两步里藏着的连接坑,够你踩一整天。和数
最原始的据库方式是JDBC。你打开IDE,连接敲下Class.forName("com.mysql.cj.jdbc.Driver"),和数然后DriverManager.getConnection(url,据库 user, password)。这行代码背后发生了不少事——驱动类被加载,连接DriverManager挨个问注册过的和数驱动谁能处理这个URL,MySQL驱动接活,据库建立TCP连接,连接完成握手认证。和数整个过程你只看到一行代码,据库但网络那头已经跑完了一套协议。
连接字符串长这样:jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=Asia/Shanghai。注意那个serverTimezone,不写它,MySQL 8.x会直接甩你一个时区异常。我第一次遇到时盯着The server time zone value '???ú±ê×??±' is unrecognized这串乱码看了半天,以为是编码问题,其实是时区没配。
拿到Connection对象后,创建Statement或PreparedStatement,执行executeQuery()拿到ResultSet,再一行行rs.next()读数据。代码写起来不复杂,但每次都要写try-catch-finally来关资源,关的顺序还得跟开的顺序反过来。漏关一个,连接池迟早被耗尽。我见过一个线上服务跑了三天突然hang住,排查半天发现是某个异常分支里ResultSet没关,连接泄漏累积到池子上限。
所以实际项目里没人裸写JDBC。连接池是标配——HikariCP、Druid、C3P0,选一个。HikariCP现在是Spring Boot的默认选项,快且轻。配好连接池之后,你从池子里借连接,用完还回去,池子帮你管理生命周期。配置参数里maximumPoolSize最需要琢磨:设太小,高并发时请求排队等连接;设太大,数据库那边连接数爆掉。没有万能值,得压测。
再往上走一层就是ORM框架。MyBatis让你把SQL写在XML或注解里,Java对象和结果集自动映射。JPA/Hibernate更彻底,你操作对象,它帮你生成SQL。用哪个看场景——业务逻辑复杂、SQL要精细控制的,MyBatis更顺手;实体关系清晰、CRUD为主的,JPA省事。我自己偏向MyBatis,因为遇到慢查询时能直接看到SQL,不用去猜Hibernate生成了什么。
不管用哪层框架,底层都是JDBC那套东西。连接池借出的是Connection,MyBatis的Executor最终调的也是PreparedStatement。理解这一层,出问题时才知道往哪查。
还有个容易忽略的点:事务。JDBC默认自动提交,每条SQL执行完就落库。你要手动控制事务,得connection.setAutoCommit(false),然后commit()或rollback()。Spring的@Transactional注解把这层封装了,但底层逻辑没变。事务传播行为、隔离级别这些概念,面试常问,实际开发中搞错了就是数据不一致。
连接数据库这件事,入门五分钟,精通可能得几年。每次觉得“这不就那样”的时候,总会冒出一个新问题教你做人。
(责任编辑:休闲)














