IDEA连接MySQL数据库的核心就三步:下载匹配的驱动包、配置连接URL、执行测试代码。 绝大多数连接失败的场景,都能在这三步里找到原因,下面按这个思路,把完整流程和常见坑位一次说清楚。
idea连接mysql数据库步骤详解
前置环境:版本匹配是第一步
打开IDEA之前,先确认本机的MySQL版本和JDK版本,MySQL 5.x和8.x的驱动类名不一样,JDK版本太旧也带不动新版驱动,命令行输入mysql --version查看MySQL版本,java -version查看JDK版本,MySQL 8.0要求JDK 1.8以上,低于这个版本建议先升级。
确认MySQL服务已经启动,Windows下按Win+R输入services.msc找到MySQL服务,Linux下执行systemctl status mysql,服务没起来,后面所有操作都是白搭。
驱动包选择:别用错版本
驱动是连接IDEA和MySQL的桥梁,版本选错是新手最常见的坑,MySQL 5.x对应mysql-connector-java 5.x系列,驱动类名是com.mysql.jdbc.Driver,MySQL 8.0以上必须用8.x驱动,类名变成了com.mysql.cj.jdbc.Driver,旧类名虽然兼容但会报警告。
0.31版本之后,官方把驱动包改名成了mysql-connector-j,去Maven仓库搜索时注意别下错,下载JAR包可以去Maven中央仓库,搜mysql-connector-j,选对应版本下载,下载后放到项目的lib目录下,右键点击JAR包,选择Add as Library,IDEA会自动识别。
五步完成连接
第一步,在IDEA中新建一个Java项目,在项目根目录创建lib文件夹,把下载好的驱动JAR包复制进去,右键JAR包选择Add as Library。
第二步,编写连接代码,核心代码就三行:加载驱动、获取连接、执行查询。
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=Asia/Shanghai";
Connection conn = DriverManager.getConnection(url, "root", "你的密码");
第三步,配置连接URL。
localhost是数据库地址,3306是MySQL默认端口,test是数据库名。useSSL=false关闭SSL加密,serverTimezone=Asia/Shanghai指定时区,这两个参数后面还会重点讲到。
第四步,写一个简单的查询语句测试连接,比如SELECT 1,能返回结果就说明连接成功。
第五步,处理异常,连接代码要捕获SQLException,打印异常堆栈信息,这一步不能省,报错信息是排查问题的关键线索。
idea连接mysql报错怎么排查
Public Key Retrieval is not allowed
这个报错在MySQL 8.0版本中相当常见,原因是MySQL 8.0默认使用caching_sha2_password认证插件,驱动第一次连接时需要获取服务器的公钥,但URL里没有授权。
解决方案是在JDBC URL末尾追加参数:allowPublicKeyRetrieval=true,完整URL长这样:
jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
行业共识认为,这个参数是MySQL 8.0连接中最容易忽略的一项,加了之后,报错立刻消失。
Server returns invalid timezone
这个报错的意思是服务器返回了无效时区,MySQL 8.x版本的驱动要求显式指定时区,否则它不知道按哪个时区来处理时间数据。
解决方案有两个,推荐第一个:在URL里加serverTimezone=Asia/Shanghai,国内服务器统一用这个时区,第二个方案是修改MySQL全局时区,执行SET GLOBAL time_zone = '+08:00',但需要重启MySQL服务才生效,开发环境下用URL参数更省事。
Access denied for user
这个报错说明用户认证失败,要么是用户名密码写错了,要么是当前主机没有访问权限,先在命令行用同样的账号密码测一下,能连上说明密码没问题,那就是权限问题。
MySQL默认只允许localhost访问,远程连接需要授权,执行下面的SQL给用户添加远程访问权限:
GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY '密码'; FLUSH PRIVILEGES;
表示允许任意主机连接,生产环境建议换成具体的IP地址,安全性更高。
Unknown database
这个报错字面意思就是数据库不存在,检查URL里的数据库名是否拼写正确,注意大小写,Linux系统的MySQL对数据库名大小写敏感,Test和test是两个不同的库。
| 报错信息 | 常见原因 | 解决方案 |
|---|---|---|
| Public Key Retrieval | 认证插件密钥获取失败 | URL加allowPublicKeyRetrieval=true |
| Invalid timezone | 时区未指定 | URL加serverTimezone=Asia/Shanghai |
| Access denied | 账号密码或权限错误 | 检查密码,执行GRANT授权 |
| Unknown database | 数据库名错误 | 核对URL中的库名和大小写 |
进阶配置:从本地连接到内网部署
用配置文件管理连接信息
连接信息直接写在代码里,换环境就要改代码,非常麻烦,把连接参数提取到配置文件里,是IDEA项目连接MySQL数据库的常规做法。
在src目录下创建db.properties文件:
jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=Asia/Shanghai jdbc.username=root jdbc.password=你的密码
代码里用Properties类读取配置:
Properties props = new Properties();
props.load(new FileInputStream("src/db.properties"));
String url = props.getProperty("jdbc.url");
Connection conn = DriverManager.getConnection(url, props);
这样换数据库环境时,只需要改配置文件,不用动代码。
内网部署场景下的连接设置
公司内网部署的MySQL,IDEA连接时需要把localhost换成数据库服务器的内网IP,同时确认MySQL的bind-address配置允许外部访问,这个参数在my.cnf或my.ini里,默认值是0.0.1
,只允许本机访问。
改成0.0.0后重启MySQL服务,让所有网卡都能监听连接请求,防火墙也要放行3306端口,Linux下执行firewall-cmd --permanent --add-port=3306/tcp,Windows下在防火墙高级设置里添加入站规则。
IDEA自带工具和Navicat怎么选
IDEA自带的Database工具面板支持连接MySQL、执行SQL、查看表结构,日常开发完全够用,打开方式:右侧边栏点Database,加号选MySQL,填连接信息,点Test Connection测试。
Navicat在数据导入导出、批量操作、可视化建表方面更顺手,适合独立的数据库管理工作,MySQL社区版免费,商业版按年订阅,对小团队来说社区版完全够用,不需要额外付费买工具。
IDEA连接MySQL,核心始终是驱动匹配和URL参数配置。 版本对得上,参数写正确,连接就是一次成功的事,遇到报错别慌,按上面的排查顺序逐项核对,多数情况下都能在几分钟内解决。
IDEA连接MySQL常见问题与解决方案
IDEA连接MySQL时区报错怎么解决?
在JDBC URL末尾追加serverTimezone=Asia/Shanghai参数即可,这个参数指定了驱动使用的时区,MySQL 8.x版本必须有这个参数才能正常连接,如果追加后仍然报错,检查MySQL服务器的全局时区设置,执行SELECT @@global.time_zone查看。
IDEA连接MySQL 8.0提示Public Key Retrieval is not allowed怎么办?
在JDBC URL中加入allowPublicKeyRetrieval=true参数,同时确保useSSL=false已经设置,也可以将用户认证插件改为mysql_native_password,但8.0.34版本之后该插件已被官方标记为弃用,推荐直接在URL参数中解决。
IDEA项目连接MySQL数据库时驱动包放在哪里?
放在项目根目录的lib文件夹下,右键JAR包选择Add as Library添加到项目依赖中,如果使用Maven或Gradle构建,在pom.xml或build.gradle中声明依赖即可,IDEA会自动下载驱动包,Maven依赖坐标是mysql:mysql-connector-java,8.0.31以上版本坐标改为com.mysql:mysql-connector-j。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/569979.html




