
IntelliJ IDEA连接Navicat数据库这句话我在不少开发群里见过每次看到都会心一笑说的人其实不是想让IDEA去连Navicat这个软件而是想在开发过程中把IDEA和Navicat这对组合真正用起来。这里必须先点破一个底层事实——Navicat是数据库客户端工具不是数据库服务。你装在电脑上的MySQL、PostgreSQL才是真正的数据库IDEA和Navicat连接的都是同一个数据库实例两者是“同事”关系不是“上下游”关系。搞清楚这一点之后很多配置就变得特别顺Navicat里能连通的连接串IDEA里几乎原样填一遍也能通Navicat里报的权限错误IDEA里往往是同一个原因。这篇文章我会从写代码的日常视角出发把整个链条完整走一遍数据库怎么准备、Navicat怎么验证、IDEA里怎么配数据源、配好以后怎么和Navicat配合着干活最后把最常见的报错一条条给你列明白。适合刚开始接触数据库开发、或者在IDEA里连库一直不顺利的同学也适合想优化日常开发流程的写码老手。1. 先把关系理清IDEA和Navicat连的不是彼此而是同一个数据库1.1 Navicat是数据库管家IDEA是你的开发工坊拿个生活化的例子来类比。Navicat就像仓库管理员数据是货它负责把货物分门别类放好、做进出登记、盘点库存、处理大批量搬运IDEA则像你的加工车间你在车间里写代码、造零件需要什么材料随时去仓库取一点来试试验证一下这个零件能不能用。这个类比能解释很多困惑。Navicat真正擅长的是可视化的数据管理建库建表不用写一行SQL鼠标点一点就出来导入Excel、导出备份、看ER图、运行复杂的报表查询这些操作用Navicat确实省心。而IDEA是编程工具它的主战场是Java、Kotlin这类代码你在IDEA里写MyBatis的Mapper、写JPA实体、跑单元测试这些场景下数据库连接是嵌在业务逻辑里的不可能为了看一条结果就切到Navicat。两者定位完全不同谁也替代不了谁。IDEA的Database工具窗口做得再好也不会有人用它来做整库的数据迁移Navicat能写SQL但你不会用它来写一个Spring Boot服务。所以结论很明确它们都围绕同一个数据库服务工作侧重点不同开发时两个都开是再正常不过的事情。1.2 为什么我在开发时总是两个工具一起开很多刚入门的朋友觉得开一个Navicat就能看数据再开一个IDEA纯属浪费。实际干过项目就知道两个一起开才是高效状态。举个最常见的场景早上到工位先打开Navicat看一眼昨天的数据有没有正常落库然后打开IDEA写一个统计接口。接口里要跑一条SQL这时候我不会切回Navicat直接在IDEA的数据库控制台里把SQL执行一遍确认结果对了再把它粘到Mapper文件里。再比如排查问题的时候代码查出来的数据和Navicat里看到的数据对不上如果没有第二个工具你很难判断到底是代码逻辑错了还是数据库里数据本身就是这个样。两个工具摆在一起左边IDEA看代码执行结果右边Navicat直接查原始数据问题出在哪一层一眼就分明。要注意的是两个工具连接的是同一个数据库实例所以配置信息必须保持一致。用户名、密码、端口、库名任何一项不一样都可能导致连不上或者连到不同的库。很多“IDEA连不上但Navicat能连上”的谜案最后查出来都是端口填错或密码里多了个空格这种事我见过不止一次。1.3 一套典型的日常开发工作流我从实际项目里总结的流程大概是这样的拿到需求以后先在Navicat里设计表结构、建好库表顺便灌一批测试数据然后到IDEA里配置数据源连接同一个数据库开始写业务代码调试的时候在IDEA控制台里执行SQL验证逻辑码到一定阶段回Navicat检查数据完整性、做一轮数据校验。遇到数据库结构要调整比如加字段、改索引我还是习惯先在Navicat里改好再回到IDEA刷新一下连接。这套流程的好处在于每个工具都在做自己最擅长的事整个开发链路没有明显短板。尤其是团队协作的时候Navicat导出的SQL脚本可以直接给同事或DBA执行IDEA里生成的实体类也能直接进版本库两边形成闭环。下面我就从零开始把每一步需要的准备工作和具体配置讲清楚。2. 准备工作数据库、Navicat、IntelliJ IDEA三件套怎么装怎么验2.1 先把数据库实例跑起来以MySQL为例Navicat支持的数据库很多但日常开发里碰得最多的还是MySQL这篇文章就以MySQL为主线来讲。安装包建议去官方渠道下载选一个稳定的8.x版本社区版就完全够学习和开发用了。安装过程基本是下一步下一步关键点是记住你设置的root密码后面所有工具连接都要用。装完以后第一件事确认MySQL服务有没有启动。Windows下可以在服务管理器里找到MySQL服务状态如果没在“正在运行”右键启动就行。macOS或Linux下可以用命令比如macOS上用brew services start mysqlUbuntu上用sudo service mysql startCentOS系用systemctl start mysqld。注意不管哪种方式启动成功之后最好再验证一下在命令行里执行mysql -uroot -p输入密码后能看到mysql这个提示符说明服务就绪了。还有一个很多人忽略的细节MySQL 8默认的认证插件是caching_sha2_password这和后面在IDEA里遇到的Public Key Retrieval报错有直接关系后面排查章节我会细讲。现在你只需要知道只要你的库是MySQL 8.x几乎都会遇到认证方式带来的配置要求提前有个心理准备就行。2.2 Navicat安装并先连一次库Navicat是商业软件安装包同样建议从官网获取试用版或者根据你自己的情况合规使用这里不展开任何破解相关的内容。安装过程没什么好说的一路确认即可。重点在新建连接这一步。打开Navicat选择MySQL连接填几个关键项主机填localhost或者127.0.0.1端口3306用户名root密码填你安装时设置的那个。数据库名这一栏我建议先不填因为这个时候你主要目的是验证服务通不通不填库名反而能避免“库名打错导致连不上”的误判。点一下“测试连接”如果弹出连接成功的提示说明MySQL服务、账号权限、端口监听都没问题。到这一步你的环境就已经具备了“能被其他工具连接”的底层条件。然后顺手建一个测试库或者导入一个课程设计常用的库建一张简单的表插几条数据。别嫌这一步简单后面IDEA连接的时候有这么个库在才能直观地验证配置成功没有。我在实际工作中把“Navicat先连一次”当成一个标准前置动作。因为它的报错比IDEA更直白如果Navicat都连不上别急着折腾IDEA先检查MySQL服务和账号权限。反过来说Navicat能连上而IDEA连不上那问题基本就锁定在IDEA侧的具体配置了排查范围一下子缩小了很多。2.3 IntelliJ IDEA版本与JDK搭配IntelliJ IDEA分为社区版和商业版这是很多新手没搞明白的地方。商业版自带完整的Database工具窗口也是大多数教程截图里看到的样子社区版是免费的但内置的数据库支持不够完整需要借助插件市场里的第三方插件来弥补。如果你手里有商业版授权直接照着我下面的步骤操作就好如果用的是社区版可以在插件市场里搜“Database Navigator”一类的插件也能实现类似功能只是界面和交互略有差别。连接数据库本身其实不依赖项目里的JDKIDEA自身会用一套内置的运行环境来加载JDBC驱动。但既然你是拿IDEA写Java项目JDK还是得配置好。打开File Project Structure在Project里设置Project SDK选一个你安装的JDK版本。社区版和商业版在这一步没有区别。版本方面我给个建议IDEA尽量用最新稳定版老版本对新版MySQL驱动支持不够好有些奇怪的报错其实是版本太老导致的。如果你还在用两年前的版本连接MySQL 8的时候遇到莫名其妙的驱动类找不到先考虑把IDEA升级一下别在配置上死磕。3. 实操在IntelliJ IDEA中配置数据库连接含驱动和关键参数3.1 打开Database工具窗口配置好前置环境之后进入正题。打开IDEA在主界面右侧工具栏有一个Database标签页点击就能看到工具窗口如果找不到可以通过顶部导航View Tool Windows Database打开或者用快捷键CtrlShiftA输入Database直接跳转。这个Database窗口就是你管理数据库连接的大本营。第一次打开它是空白的需要自己新建数据源。我能理解很多朋友第一次打开这个面板会觉得陌生但只要建好一次连接后面所有操作都是在这个面板里展开的用熟以后效率非常高。有一点需要提醒如果你用的是社区版且在插件市场装了数据库插件打开的窗口可能不叫Database但大体功能是一样的无非就是新建连接、看表结构、跑SQL这些核心能力。后面步骤我会以商业版内置的Database窗口为基准来演示第三方插件界面略有差异但逻辑相通。3.2 新建MySQL数据源在Database窗口左上角点击号选择Data Source再选择MySQL。这个时候会弹出一个数据源配置对话框需要填的核心字段有四个Host、Port、User、Password下面还有一个Database可选项。我强烈建议新手第一次配置时Database这一栏先不填。原因前面也说过空着它连接成功以后你能在左侧树形列表里看到这个MySQL实例下的所有数据库自由选择要操作哪一个填了反而容易因为库名写错而误以为连接不上。学会这一招你后面在IDEA里切库会灵活很多。用户名和密码要仔细核对别带多余空格。Host一般填localhost或127.0.0.1如果你连的是远程数据库这里就填远程服务器的IP。Port默认3306除非你改过MySQL的端口否则保持默认就好。所有字段填完之后先别急着点确定我们还要处理驱动和关键参数。3.3 下载驱动和三个必背的URL参数第一次新建MySQL数据源时IDEA通常会提示缺少驱动文件界面上会有Download按钮点它就会自动去下载MySQL的JDBC驱动。正常情况下等一小会就能完成驱动文件会出现在数据源配置界面的Driver Files区域里。网络不好的时候下载可能失败或者IDEA一直停在下载中。解决办法我放在后面的排查章节细说这里你先记住驱动是这个连接的前提没有驱动一切白搭。下载好驱动之后IDEA会自动生成一个JDBC URL默认长这样jdbc:mysql://localhost:3306。这个URL在连接时是可以改的我强烈建议你把它改成下面这个完整版本jdbc:mysql://localhost:3306?useSSLfalseserverTimezoneAsia/ShanghaiallowPublicKeyRetrievaltrue为什么必须加这三个参数我一个个解释。useSSLfalse的意思是本地开发不用SSL加密连接。MySQL 8驱动在有些环境下默认尝试SSL握手本地调试没必要也没配置证书加上这个参数能避免很多证书相关的报错。serverTimezoneAsia/Shanghai是解决时区问题的。MySQL驱动连接8.x版本时经常报“Server returns invalid timezone”就是因为服务器时区没配置或者驱动拿不到时区信息显式指定成东八区一劳永逸。allowPublicKeyRetrievaltrue是专治MySQL 8认证的。前面提过MySQL 8默认caching_sha2_password认证插件客户端第一次连接时需要从服务器获取公钥来加密密码这个参数就是允许客户端自动拿公钥。不加它你会看到“Public Key Retrieval is not allowed”的报错。在IDEA的配置界面里你可以在URL输入框直接粘贴这串地址也可以点Advanced标签页搜索对应的参数来填。界面里直接粘贴的方式最直观我平时就这么干。3.4 测试连接并保存参数都填好后点击界面下方的Test Connection按钮。正常情况下会弹出一个绿色对勾的提示告诉你连接成功。如果弹出的是红色报错别慌先看报错内容大概率是驱动没下载成功、时区参数没写对、或者密码不对这三个原因之一对应的解决方案在第五章都能找到。测试通过之后点击Apply再点OK数据源就保存好了。回到Database窗口左侧会多出你刚才配置的数据源节点展开它就能看到数据库列表。到这一步“IntelliJ IDEA连接数据库”这个核心目标就算完成了。我这里要提一个很多人问过的细节测试连接成功后界面上可能会让你选schema。schema在MySQL里基本等价于数据库你可以选择把哪些库显示在面板里。不选也没关系后面随时可以右键数据源去调整。3.5 连接成功后能玩什么连接建好可不是为了摆着看的。在IDEA的Database窗口里最常用的几个操作你要记牢。第一个是打开SQL控制台。右键数据源或某个具体的数据库选择Open Console会打开一个SQL编辑器在这里面写SQL、执行SQL结果直接以表格形式展示。这个控制台支持语法高亮、自动补全写复杂查询比在Navicat里还顺手。第二个是直接查看表数据。展开数据库找到你要看的表双击表名右侧会出来一个数据视图可以直接浏览所有行。想改数据就右键行选Edit数据量小的时候这个功能非常方便。第三个是生成实体类。对着一张表右键找到Generate POJOs之类的入口IDEA会自动生成对应的Java实体类字段映射、类型转换都处理好能省不少手敲的功夫。具体入口的菜单名称会随版本略有差异但功能是稳定存在的。其他还有Schema对比、SQL方言检查等功能平时用不着记那么多以上这三个操作已经能覆盖日常开发80%的需求了。4. 实战协同Navicat和IDEA一起用时的高效姿势4.1 一个项目里谁负责什么连接配好以后真正考验的是日常使用中怎么分配任务。我的习惯是建库建表、导入导出、复杂报表、数据备份这类重量级数据操作全部交给Navicat写代码、联调SQL、跑单元测试、生成实体类这些开发侧的事情尽量在IDEA里完成。这样安排有个很实际的理由。Navicat在数据管理层面的体验确实更成熟比如导入Excel、同步表结构、做ER图这些功能IDEA的Database窗口虽然有但精细程度上还有差距。而IDEA的优势在于和代码的融合你在写Mapper的时候SQL可以直接在旁边的控制台验证上下文完全不割裂。还有一个底层原则要记住两边连的是同一个库做的事情要分清楚。最怕出现的情况是两个工具同时去改同一张表的结构你改完我改没有统一约定。团队协作的时候这种混乱往往会引发线上事故。所以起码要在自己心里有个分工什么操作归Navicat什么操作归IDEA不要混着来。4.2 两边同时连同一个库要注意什么很多新手担心Navicat开着IDEA也开着会不会互相影响其实不会。MySQL本身支持多连接两个客户端同时连同一个实例是很正常的事不存在谁挤掉谁的问题除非你的数据库连接数配置得很小被某个连接池打满了那另当别论。真正要注意的是事务状态。举个例子你在Navicat里执行了一条update语句但是没点提交整个事务还没结束。这个时候切到IDEA里查这张表查到的一定是旧数据因为那条update在未提交状态下其他连接是看不到的。很多朋友遇到这种“两边数据对不上”的情况第一反应是代码有bug查了半天最后发现是Navicat里躺着一条没提交的事务。还有一种情况是IDEA这边的应用连接池产生的。比如你跑着一个Spring Boot项目HikariCP维护了一堆数据库连接它是有缓存的。有时你在Navicat里改了表结构IDEA里的应用还是用旧的连接信息导致新字段查不到。遇到这种诡异问题重启一下应用或者让IDEA断开重连基本都能解决。这不是配置问题是连接池的正常特性。另外两边同时操作时可别互相踩脚。我在实际开发中就遇到过Navicat里正跑着大批量更新IDEA这边又发起了一个耗时的查询两边把CPU和磁盘IO吃满了整个数据库卡住。后来我养成了习惯重要的大批量操作前先看一眼有没有其他长查询在跑错开高峰期再执行。4.3 新表、新数据看不到先做这一步我在项目里被问得最多的问题之一就是明明在Navicat里新建了表为什么IDEA的Database窗口里看不到不是连接断了也不是权限不够纯粹是IDEA没刷新。IDEA为了性能不会每次都实时去扫描数据库的所有对象它有自己的缓存机制。所以从Navicat那边建了新表、加了新字段切回IDEA后要先在左侧树形列表中右键数据源或具体的Schema选择Refresh手动触发一次刷新。绝大多数情况下刷完新表就出现了不需要断开重连。如果刷新了还是没有再看第二种可能性你的IDEA连接配置里Database那一栏是不是填了具体的库名会不会是连到了另一个库这种低级错误真的发生过。实在找不到就断开连接重新连接一次问题基本能定位。这里顺便分享一个经验习惯每次从Navicat切回IDEA之前养成随手刷新的习惯比等到代码报错再排查高效得多。特别是团队协作时别人改了表结构你这边不及时刷新代码里迟早会飘红。4.4 结构同步和数据同步的常规玩法实际工作中经常需要在不同环境之间同步数据库比如开发库和测试库本地库和正式库。这应该是Navicat的高光场景它提供了结构同步和数据同步两个工具选出源库和目标库对比一下差异勾选要同步的对象点执行就完了非常直观。不过我个人的习惯是重要的结构变更尽量沉淀成SQL脚本放进项目的版本控制里。这样做的好处是变更历史可追溯同事拿到代码同步执行一遍各个环境的表结构就能保持一致。Navicat的同步工具适合临时性、一次性的调整版本化脚本适合长期维护。IDEA的Database窗口也提供了相关的对比功能可以对两个数据源做Schema或表结构的Diff边看差异边写变更脚本。这个功能很多人不知道实际上挺有用的特别是你手头两个环境结构不一致、又不知道差在哪里的时候做一次对比就一清二楚了。有一点要记住无论用哪个工具做同步操作前务必备份目标库。数据同步这种事手一滑就可能覆盖掉线上数据我吃过这个亏。至少先做一次转储给自己留条退路。5. 报错排查连接数据库最常见的坑和解决方案5.1 驱动下载失败或提示Driver class not found这个问题出现频率超高尤其是在公司网络、校园网这种受限环境下IDEA自动下载驱动经常超时。表现就是Test Connection时报“Driver class not found”或者一直卡在下载页面。这时候不要再反复点Download了直接手动解决。去Maven中央仓库搜索mysql-connector-j找到和你MySQL版本匹配的驱动jar包下载下来。然后在数据源配置界面的Driver Files区域点加号把本地jar文件添加进去IDEA刷新之后就会识别到这个驱动。驱动版本选择有个小原则MySQL 8.x对应的驱动至少选8.0.x别为了兼容去选5.1的旧驱动旧驱动对MySQL 8的新认证方式支持不完整反而容易坑自己。还有驱动jar下载好之后放到一个固定的本地目录平时做个备份下次换电脑或者新开项目直接用就不用再被网络折腾一遍。5.2 Public Key Retrieval is not allowed这个报错的场景很典型十有八九是MySQL 8.x 新装的驱动 没加allowPublicKeyRetrievaltrue。它在IDEA里的表现是一长串英文错误很多人第一次看到就懵了以为密码错或者权限不对其实和密码没关系。原理我之前说过MySQL 8的默认认证插件是caching_sha2_password客户端第一次建立连接时需要从服务器获取公钥用于加密传输密码。出于安全考虑驱动默认不允许自动获取公钥必须你在连接串里显式放开。解决办法就是在URL里加上allowPublicKeyRetrievaltrue或者去Advanced标签页把这个属性设成true。还有一种一劳永逸的办法就是把MySQL用户的认证插件改回mysql_native_password但这种方式需要alter user而且新版MySQL趋势就是往caching_sha2_password走我不建议为了省配置去改认证插件老老实实在连接串里加参数才是正道。5.3 Server returns invalid timezone这也是一个高频报错出现的时候往往是在MySQL 8.x版本上IDEA测试连接直接给一段英文错误。核心原因就是MySQL服务端的时区信息不明确驱动没法判定当前应该使用哪个时区。解决办法我推荐首选在URL里加上serverTimezoneAsia/Shanghai这是一个纯客户端层面的修复改完马上生效不影响其他应用。如果你想从服务端根治可以在MySQL里执行set global time_zone 08:00但这会影响所有新连接需要你有对服务端的修改权限而且不少云数据库还不让改所以别纠结还是在IDEA连接参数里解决最省事。这里补充一个小知识点报错里的timezone中文叫“时区”有的朋友误以为是自己电脑系统时间不对其实跟系统时间没关系就算你电脑时间再准服务器时区配置缺失照样报这个错。理解了底层原因以后再看到类似报错就不会心慌了。5.4 Access denied for user rootlocalhost这个报错比起前几个更“人道”至少你能看懂是权限被拒绝了。但它背后的可能性很多常见的就是密码不对、用户被限制了访问来源、或者MySQL里根本没有这个用户。排查思路很简单先在Navicat里用同一套账号密码试一遍Navicat如果能连上说明账号权限没问题那问题大概率出在IDEA填写的配置里检查一下User、Password字段有没有前后空格Host填的是不是和Navicat一致。Navicat也连不上就去MySQL命令行里看一下这个用户到底存在不存在授权范围是什么。如果是权限问题常规的解决方式是登录MySQL后用GRANT语句给用户授权比如GRANT ALL PRIVILEGES ON.TO rootlocalhost IDENTIFIED BY 你的密码;然后FLUSH PRIVILEGES;。注意MySQL 8里IDENTIFIED BY的写法可能需要调整但开发环境下这样操作基本够用。还有一种情况是Host字段填成了%或具体IP和实际来源不匹配多注意一下就行。5.5 Communications link failure或连接超时Communications link failure这个报错一看就很“通讯失败”通常意味着客户端根本连不上MySQL服务。原因不外乎这几种MySQL服务没启动、端口写错、防火墙拦截、或者Host填的地址不对。排查顺序我建议从简单到复杂。第一步在命令行执行mysql -uroot -p能进说明服务正常进不去先启动服务。第二步看Navicat能不能连能连说明端口和账号都没有大问题问题就集中在IDEA侧配置检查Host和Port是不是填得多余或有空格。第三步Windows下用netstat -ano | findstr 3306看看端口到底有没有被监听Linux和macOS可以用lsof -i:3306。如果发现端口没监听说明MySQL还没真正跑起来如果端口被其他进程占了那就是MySQL启动失败后的二级问题去查MySQL的日志文件。连接超时还有一种情况是你填了远程数据库地址但远程服务器的防火墙没开放3306端口或者数据库账号不允许远程登录。这时候别急着怀疑IDEA先去服务器上确认一下监听地址是0.0.0.0还是127.0.0.1再决定下一步。总之这类报错的范围很广但排查手段就那一套按顺序来基本都能定位。5.6 连接失败常见问题速查表问题现象常见原因快速解决Driver class not found驱动未下载成功手动下载mysql-connector-j jar并添加到驱动文件Public Key Retrieval is not allowedMySQL 8认证方式导致URL加allowPublicKeyRetrievaltrueServer returns invalid timezone服务端时区缺失URL加serverTimezoneAsia/ShanghaiAccess denied for user密码或权限不对先对比Navicat能否连接再到MySQL授权Communications link failure服务未启动/端口/防火墙按命令行、Navicat、端口监听顺序排查看不到新表IDEA缓存右键数据源Refresh刷新MySQL服务占用CPU高两端同时跑大量查询错峰执行避免互相踩踏这张表我建议截图存一份后面配置环境的时候碰到问题先查这张表比自己瞎试快得多。很多问题不是你配置错了而是对工具的机制理解不到位比如缓存、认证方式、时区这些概念提前有个认识报错再复杂也能拆解。5.7 避坑心得和几个实用建议连接配置这块我有几条实践下来的教训想分享。第一条改连接串之前先把原有配置复制出来存档。不要小看这个习惯我踩过改了URL导致连接不上的坑后来重新对比才发现是漏了个参数。备份一份随时能回退安全感强很多。第二条连接串里含符号时如果这个配置要被写进XML文件比如Maven或Spring的配置文件必须转义成否则XML解析就会报错。在IDEA图形界面里直接粘贴没问题一旦进了配置文件这个细节就是致命的。第三条关于密码安全。IDEA默认会把数据库密码保存在本地还会提醒你“保存密码会降低安全性”。如果你在团队项目里共用一个配置我建议敏感信息用环境变量或者本地配置文件来管理千万别把生产库的密码硬编码进代码仓库这是底线问题。配上IDEA的Settings Sync功能连接配置可以跨机器同步但同步前把密码清掉到了新环境再手动输入避免凭据被带到不该去的地方。结尾关于这套组合我最后想多说几句这套IDEA加Navicat的组合我用了好几年过程中踩过的坑基本都写在上面了。要说个人感受最重要的一点是别指望某一个工具包打天下。IDEA的Database窗口确实好用但真要设计复杂表结构、做大批量数据导入导出我仍然习惯交给Navicat反过来跑业务代码的时候我也不会切回Navicat去写那几条联调SQL直接在IDEA的控制台里解决省去窗口切换的时间。最后再送大家一个小技巧把IDEA里的连接配置通过Settings Sync同步到常用电脑新环境打开就能直接用JDBC驱动也会自动带上。不过同步的时候注意别把生产库的密码也同步过去到了新机器手动重填一下安全性高很多。平时多花十分钟把连接串、驱动、环境这些基础配置理顺后面半年都能少踩坑。希望这篇分享能帮你把两个工具彻底打通不再被连接数据库这件小事卡住。