【MySQL】使用JDBC时,无法连接远程MySQL数据库

jdbcTemplate测试报错:没有合适的驱动 报错具体信息: "C:\Program Files\Java\jdk1.8.0_201\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\idea\IntelliJ IDEA 2020.2.1\lib\idea_rt.jar=57710:D:\idea\IntelliJ IDEA 2020.2.1\bin" -Dfile.encoding=UTF-8 -classpath "D:\idea\IntelliJ .. 阅读详情

使用JDBC时,无法连接远程MySQL数据库



问题

今天连接MySQL的时候,程序很久没有反应,在过了几分钟后向我抛出了一堆异常:

警告: Having failed to acquire a resource, com.mchange.v2.resourcepool.BasicResourcePool@3d121db3 is interrupting all Threads waiting on a resource to check out. Will try again in response to new client requests.

java.sql.SQLException: Connections could not be acquired from the underlying database!

    at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:118)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:692)
    at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:140)
    at cn.wjinlong.spring.jdbc.JDBCTest.testDataSource(JDBCTest.java:43)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source.
    at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1469)
    at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:644)
    at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:554)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutAndMarkConnectionInUse(C3P0PooledConnectionPool.java:758)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:685)
    ... 24 more
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
    at sun.reflect.GeneratedConstructorAccessor6.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:989)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:341)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2192)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2225)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2024)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:779)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
    at sun.reflect.GeneratedConstructorAccessor5.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:389)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:330)
    at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:175)
    at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:220)
    at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:206)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:203)
    at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1138)
    at com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1125)
    at com.mchange.v2.resourcepool.BasicResourcePool.access$700(BasicResourcePool.java:44)
    at com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1870)
    at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:696)
Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:211)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:300)
    ... 20 more

解决过程

异常的大概意思就是无法从数据库获得连接,所以:
1. 我首先去检查了数据库配置文件中的用户名、密码和url等信息,确保了自己没有手残地多打了几个空格,检查了几遍后,发现配置文件是没有问题的。
2. 在确保我的配置信息完全没有问题的情况下,我又想到可能我的数据库的用户权限可能存在问题,于是我去检查了用户的权限:
SQL语句为:SHOW GRANTS FOR 'test'@'%'; test为用户名,%为host。
这里写图片描述
可以看到,test用户拥有对test数据库的所有权限。
3. 这时候我就很懵逼了,想不到哪里出了问题,之前也连接过很多次,为啥会出问题呢?仔细想了想,这次和之前的唯一不同就是,这次连接的是远程的MySQL,之前连接的都是本机的MySQL,于是我就想到是不是远程的防火墙禁止外部访问呢?于是去查询了远程主机的防火墙状态:
这里写图片描述
可以看到,防火墙并没有拦截的规则。
4. 很气,哈哈哈。这真是奇怪啊,想了几遍,还是没有头绪,突然聪明的小脑瓜灵光一闪,我打算使用Navicat(图形化连接数据库工具)连接一下远程的数据库,看看到底是哪里的问题。
这里写图片描述

2003 - Can’t connect to MySQL server on ‘xx.xx.xx.xx’ (10061 “Unknown error”)

成功的报了错,我很开心,毕竟证明程序没有问题,而且有了错误编号,于是就去搜索相关问题。有人说这个错误可能是MySQL服务没有启动,吓得我瑟瑟发抖,这本应该是我首先想到的问题,赶紧去检查了下MySQL 的状态:
这里写图片描述
虚惊一场,我就说么,怎么会犯这种错误。
5. 没办法了,是时候祭出我的大法器啦——官方文档
从官网找到文档,又找到了连接错误出现的地方。点击连接可以直达。
这里写图片描述
从文档中发现一段话,和我的问题高度吻合。
于是我去查看了下MySQL的配置文件:
这里写图片描述
注意红框里的bind-address=127.0.0.1,这是MySQL的msyql默认设置。这时候我,们看一下MySQL的端口情况:
这里写图片描述
好像发现了些问题,注意我红框里的127.0.0.1,这里就是问题的原因。这个稍后再解释,我们先把bind-addrss=12.70.0.1注释掉,重启MySQL,再次连接,连接成功!!

这时候我们看一下MySQL的端口情况:
这里写图片描述

此时的Local Address已经从127.0.0.1–>0.0.0.0这就表示,从外部访问数据库时可以通过和本机的任何ip进行通信,而不是本地回环ip127.0.0.1。

总结

关于bind-address为127.0.0.1是MySQL的默认设置,这样的设置会阻止远程的数据库连接。所以当你要从远程访问MySQL的时候,再MySQL的配置文件中可以把这一行注释掉,或者把127.0.0.1换成你客户端的ip。

使用JDBC连接MySQL数据库 目录 1.MySQL驱动配置和使用 2.通过JDBC连接数据库 3.解决JDBC连接数据库时存在的SQL注入问题 4.使用封装工具类实现JDBC连接数据库 使用JDBC连接数据库 1.MySQL驱动配置和使用 下载驱动 JDBC 指 Java 数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库。 主要用于执行 SQL 查询,并查看查询的记录。 使用 JDBC 需要先下载驱动。mysql8需要设置时区,有cj目录,mysq... 阅读详情

相关推荐

【MySQL】使用 JDBC 连接数据库

在 MySQL 系列中,我们介绍了很多内容,包括但不限于建库建表,增删查改等等,但是这些操作都是直接在本机上的 MySQL 进行的,而在实际的开发过程中,我们很少会这样做,更多的是通过代码(C++、Java、Python……)来操作数据库的。今天我们就会简单介绍如何通过 Java 代码来操作数据库今天我们介绍了如何使用 JDBC 连接数据库,通过代码来直接操作 MySQL 数据库,上面展示的操作方法还是比较粗糙的,而且随着技术的不断更新,我们也很少会直接使用 JDBC 了。

m0_74823595的博客 1453

Having failed to acquire a resource, com.mchange.v2.resourcepool.BasicResourcePool@15bbf42f is inter

目录结构如下: 测试代码如下: import com.mchange.v2.c3p0.ComboPooledDataSource; import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; public class C3P0Demo { public static void main(String[] args) throws SQLException { Da

kite的博客 1万+

C语言|深入浅出讲解int转换为float全过程(附2017年统考大题案例)

int转换为float类型为什么会发生精度损失? 精度损失的详细过程究竟是什么样的? 什么样情况float会发生精度损失?没有弄懂2017年浮点数统考大题? 这一篇用2017年统考大题案例帮你更深的理解浮点数的存储规则。

DADONGOOO的博客 1万+

使用c3p0数据库连接池的各种报错警告: Having failed to acquire a resource, com.mchange.v2.resourcepool

在尝试使用c3p0数据库连接池的时候,首先先导入了三个jar包: c3p0-0.9.5.2.jar mchange-commons-java-0.2.3.4.jar mysql-connector-java-8.0.13.jar 然后写了c3p0-config.xml配置文件如下: <c3p0-config> <!-- 默认配置,如果没有指定则使用这个配置 --...

是袁同学呀 3万+

高效 DEM 拼接

通过以上步骤的系统实施,能够实现高效、准确的大型地理信息系统 DEM 数据拼接,满足复杂和大规模项目的应用需求。

llhllq2015的博客 1035

动手学Moveit2 | 运行配置好的机械臂功能demo

通过这个小demo你可以直观的感受moveit2的强大,但还有很多需要我们探索的,比如机械臂是如何规划的,规划的过程中如何结合环境信息,规划的时候机械臂如何求解,如何和真实的机械臂对接等等,这些都需要你来进一步探索,今天就到这里,明天给大家秀一下小仙女焊的fishbot运控板。

生活不止眼前的苟且 8881

CDH 之 记一次 mysql 升级导致 cloudera scm server 启动失败

发现数据库 scm 的密码和原来已经不一样,更新数据库人员更新之后修改了 root 用户数据库密码,但是没有修改 scm 用户密码,db.procerties 却填了修改后的 root 用户密码,导致数据库连接异常。查看日志:tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log。尝试关闭 cloudere-scm-server:systemctl stop cloudera-scm-server。

予挚之的博客 983

昇腾310B实战:FFmpeg硬件加速全流程解析与性能优化

本文详细解析了昇腾310B与FFmpeg硬件加速的全流程,包括环境配置、性能优化及常见问题排查。通过实战案例展示,昇腾310B在视频转码中性能提升可达6倍,同时降低功耗,特别适合多媒体处理和高性能计算场景。

m3n5b7v8c9x的博客 736

【C3P0】解决使用c3p0数据库连接池的各种报错警告: Having failed to acquire a resource, com.mchange.v2.resourcepool

运行环境 软件: IntelliJ IDEA java version “1.8.0_261” MySQL"5.7.19" 在使用IDEA连接c3p0数据库时,导入的四个jar包: 1.mysql-connector-java-5.1.47.jar 2.c3p0-0.9.5.5.jar 3.mchange-commons-java-0.2.20.jar 4.commons-logging-1.2.jar c3p0-config.xml配置文件如下: <?xml version="1.0" encodi

helloyuanye的博客 5087

phaser3适配微信小游戏

phaser3适配微信小游戏

SilenzioX的博客 1805

开源遥感语义分割工具箱mmsegmentation基于Lovedata数据集训练模型

开源遥感语义分割工具箱mmsegmentation基于Lovedata数据集训练模型

yilvyangguang520的博客 499

mysql开启远程连接

### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is com.alibaba.druid.pool.GetConnectionTimeoutException:...

guyu96的博客 3520

YOLOv11训练:Roboflow免费数据集获取与格式转换超详细教程

公共数据集库:包含超过20,000个开源数据集数据标注工具:支持在线标注和团队协作数据预处理:自动增强、扩充和格式化版本控制:像管理代码一样管理数据集版本多格式导出:支持所有主流目标检测格式import cv2# 加载图像# 加载标注# 数据增强# 调整尺寸# 调整标注坐标# 转换为Tensor# 实现保持长宽比的resize逻辑pass# 坐标转换逻辑pass# 数据增强实现pass数据集选择优先选择Roboflow上标注质量高的官方数据集。

weixin_39818775的博客 2362

jdbc驱动和mysql版本的对应关系引起的Could not create connection to database server

前言 之前在docker上部署项目时发现个问题:在本地运行时一切正常,打包部署到docker上的tomcat时一直报错无法连接数据库,期初认为是数据库远程权限的问题,各种方法试了都不管用,后来搜索过程中看到有帖子说可能是jdbc版本和mysql版本的问题,后来就试了下果然是这个问题。 报错代码 com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to databa

江河君的博客 1929

kaggle学习笔记-餐厅数据挖掘

分析Zomato数据集的基本思想是为了公平地了解影响在班加罗尔不同地方建立不同类型餐厅的因素,每个餐厅的总评级,班加罗尔是这样一个城市,拥有超过12,000家餐厅,餐厅供应来自世界各地的菜肴。每天都有新的餐馆开业,这个行业还没有饱和,需求也在与日俱增。然而,尽管需求不断增加,新餐馆却很难与老牌餐馆竞争。大多数餐厅都供应同样的食物。班加罗尔是印度的IT之都。这里的大多数人主要依靠餐馆的食物,因为他们没有时间自己做饭。由于对餐馆的需求如此巨大,因此研究一个地方的人口统计学就变得很重要。

优快云XXCQ的博客 1862

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

matlab为何连接不上mysql_Matlab2016b使用jdbc无法连接MySQL:Communications link failure

Tips:软件及系统信息:Matlab2016b 64位,操作系统Windows 10 64位。错误信息:Communications link failure,The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from th...

weixin_34856444的博客 902

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

JDBC 连接 MySQL

JDBC 是 Java DataBase Connectivity (Java 数据连接)技术的简称,是一种可用于执行SQL 语句的 Java API。它由一些 java 语言编写的类和接口组成;程序员通过使用 jdbc 可以方便地将 SQL 语句传送给几乎任何一种数据库。......

程序猿追的博客 11万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【MySQL 数据库】JDBC 编程之 Java 连接 MySQL

文章目录1. 数据库编程的基础条件2. Java 的数据库编程:JDBC3. JDBC 访问数据库的层次结构4. MySQL 数据库操作介绍5. MySQL 驱动包的下载及添加到项目6. JDBC 使用步骤6.1 创建数据库源,连接 Connection6.2 构造 SQL 语句,为执行的操作做准备6.3 执行 SQL,并处理结果集6.4 释放资源6.5 JDBC 编程模板7. JDBC 常用接口和类7.1 DataSource 和 MysqlDataSource7.2 Connection7.3 Prep

吞吞吐吐大魔王的博客 5268

IDEA使用JDBC连接MySQL数据库详细教程

首先需要保证你已经成功安装mysql 接下来下载连接MySQL数据库的驱动 使用JDBC连接MySQL数据库的驱动为Connentor/J,这里以最新版本的8.0为例 解压zip文件,随便解压到一个地方就好,当然作为程序员,需要有好习惯的 创建java项目,导入mysql-connector-java-8.0.13.jar包 下面再来看下导入jar的步骤 写代码 //导入包 import ja...

永不止步的博客 10万+

JDBC连接MySQL数据库

JDBC连接MySQL数据库

weixin_66107760的博客 4954

Java连接mysql数据库——使用JDBC连接mysql,cmd通过JDBC连接mysql以及VS code通过JDBC连接mysql

学好一门计算机语言,那肯定是避免不了会连接数据库,通过程序去管理数据库,当然一般都是远程管理,不过本篇文章主要是连接本地数据库,下一篇文章才是远程连接mysql数据库java层面我就不多说,直接说MySQL的安装与使用如果安装MySQL已经完成,那么可以跳过此步骤1首先到官方网站下载MySQL:https://downloads.mysql.com/archives/cluster/如下图:当然也可以点此链接到我的百度网盘下载:MySQL网盘下载下载完成后进行解压,MySQL可以配置环境变量,也可以不配置,

m0_59799878的博客 2039

Hive数据仓库的远程连接

大家都知道Hive数据仓库如果能用远程连接工具进行连接操作的话,会方便很多,那么今天咱们就来聊一聊Hive数据仓库的远程连接。

weixin_71674422的博客 2566

Android连接远程MySQL数据库

Android连接远程MySQL数据库 环境 Android Studio Android SDK JDK 14 mysql-connector-java-5.1.39-bin.jar 导入JDBC 到MySQL Downloads下载合适的JDBC连接驱动,并导入Android项目中 activity_main.xml src/main/res/layout/activity_main.xml <?xml version="1.0" encoding="utf-8"?> <androi

qq_44486439的博客 3539

使用JDBC技术连接MYSQL数据库并实现增删改查的操作

一、设计模式_桥接模式 1、属于结构型模式。 2、在抽象化和实现化之间实现脱耦。抽象化就是把对象的实现采用抽象类的方式;实现化把对象的实现采用接口。脱耦就是让抽象化体系与实现化体系不要耦合在一起。 3、对象功能的扩展一般都使用继承,在有些情况下会造成子类的数量增长得非常快,也就是为了扩展类的功能,可能会写很多个类。 4、把以上抽象类的体系剥离出来,让实现类直接去实现接口,让抽象去组合实现类。 从以上的结构可以看出,该结构具有二个维度的变化可能,一个是实现的部分,一个是抽象的部分,如果两者同时都发生变化,

norang的博客 3604

JDBC连接MySQL数据库详解

JDBC(Java Database Connectivity)是Java语言中用于执行SQL语句的标准API。它为多种关系数据库提供统一访问,使用Java语言编写的应用程序可以通过JDBC与各种数据库建立连接,进行数据插入、查询、更新、删除等操作。JDBC为Java应用程序提供了一种强大而灵活的数据库访问方式。通过掌握JDBC,开发者可以轻松地实现各种数据库操作,为应用程序增添数据持久化的能力。

随喜 1534
上一篇: 【算法】常用排序算法时间空间复杂度
下一篇: 【Tomcat】Tomcat部署Web应用时出现异常
cflys
博客等级 码龄12年 113粉丝 41原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值