com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure一、前言在学习AndroidAndroid入门案例(二)——JDBC连接MySql数据库使用jdbc方式连接本地数据库时报错:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:CommunicationslinkfailureThelastpacketsentsuccessfullytotheserve……

大家好,又见面了,我是你们的朋友全栈君。

目录

一、前言

二、解决


一、前言

在学习AndroidAndroid入门案例(二)——JDBC连接MySql数据库使用jdbc方式连接本地数据库时报错:

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.

网上百度方案绝大部分有:

1.网上说是出现这个问题是因为超时,数据库连接(java.sql.Connection)连接关闭,因此可以设置连接最长时间,wait_timeout的默认最长时间是28800秒,也就是8小时时间

以root打开该文件:sudo gedit /etc/mysql/my.cnf

再末尾添加:

[mysqld]
     wait_timeout=31536000
     interactive_timeout=31536000

保存重启生效

但是并没有解决我的问题,  各位可以试一下是否可以 解决你们的问题,如若不行,再看下文

二、解决

1.如果访问的是本地数据库,localhost或者127.0.0.1的ip其实是不对的  

连接数据库超时,可能是因为ip不对,网上使用jdbc连接数据库,有一部分数据库ip中为localhost或者127.0.0.1,刚开始我也是,结果一直报错,然后在测试类中却可以,运行安卓案例就不可以,问了师傅才明白,数据库是安装才本机上的,安卓程序运行访问的数据库ip地址是localhost,安卓程序是独立在Virtual Device中的,难道你虚拟手机中安装了数据库???

所以说,电脑和安卓虚拟机其实是两个ip地址,应该改为本机数据库地址,

  • 可以在cmd中输入ipconfig查看Ipv4地址,换掉localhost 或者127.0.0.1
  • 或者ip改为10.0.2.2,这是Android虚拟机的默认宿主IP地址

本人的到此还是有问题,所以接着下文!

2.如果访问的是远程数据库或者本地数据库还是连接失败,检查数据库是否公开权限

MySQL中root用户默认只能用于本地本机连接数据库,如果你的数据库没有公开过权限的话,默认是没有远程访问权限的

本人为了方便,新建了一个local用户,新建用户及授权操作如下:

1)进入数据库:mysql -u root -p密码

2)use mysql;

3)create user ‘userName’@’host’ identified by ‘password’;

      com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

  • userName:创建数据库新用户的用户名
  • host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost;如果想让该用户可以从任意远程主机登陆,可以使用通配符%
  • password:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器

4)grant all privileges on databaseName.tableName to ‘userName’@’host’;

     com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

  • privileges:用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所的权限则使用all privileges 
  • databaseName:数据库名
  • userName:指定需要赋予权限的用户
  • tableName:表名,如果要授予该用户对所有数据库和表的相应操作权限则可用*表示,如*.*
  • host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost;如果想让该用户可以从任意远程主机登陆,可以使用通配符%

现在连接数据库信息变为:

private static String driver = "com.mysql.jdbc.Driver";//MySQL 驱动
    private static String url = "jdbc:mysql://ip:3306/dbname";//MYSQL数据库连接Url  ip:数据库ip地址    dbname:连接的数据库名
    private static String user = "local";//用户名
    private static String password = "123456";//密码

终于OK了!!!

欢迎访问我的个人小站哦:我爱吃土豆

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/152234.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • kafka删除topic数据_kafka查看topic列表

    kafka删除topic数据_kafka查看topic列表 kafka删除topic提示markedfordeletion [html] viewplain copy [root@logSer config]# kafka-topics.sh –delete –zookeeper localhost:2181 –topic test-group        Topic test-group…

    2022年10月9日
    2
  • J2EE是什么?和JavaEE的是什么关系?「建议收藏」

    J2EE是什么?和JavaEE的是什么关系?「建议收藏」首先,现在很多人看到J2EE会比较懵圈,因为接触的Java一般是JavaSE和JavaEE,其实J2EE在JDK5.0之后改名为了JavaEE,J2SE改为了JavaSE,只是名字上的一个更改而已。Java分三个版本:JavaSE(标准版)、JavaEE(企业版)、JavaME(微型版),其中JavaSE是Java编程语言的基础,JavaEE是用于公司的PC端开发的,而JavaME是用于移动端开发的。那么JavaEE呢,是java面向企业级的版本,主要面向是Web应用,尤其是企..

    2022年10月10日
    4
  • 登录mysql数据库的几种方式

    登录mysql数据库的几种方式登录mysql数据库的几种方式

    2022年7月17日
    12
  • stm32看门狗工作原理

    stm32看门狗工作原理一、为什么需要看门狗?在MCU微型计算机系统中,MCU运行程序很容易受到外界电磁场的干扰,从而造成程序运行错误甚至造成跑飞现象,从而陷入死循环,程序的正常运行被打乱,从而造成不可预料的严重后果,于是人们就设计了一款用于实时监测计算机运行状态的芯片,我们就将其称为看门狗。二、看门狗的作用看门狗会无时无刻的去喂狗,如果程序发生跑飞的现象,那么单片机程序就不能继续去喂狗,继而计数器计数到0,看门狗产生复位脉冲信号。单片机发生程序跑飞的现象才会产生一个复位脉冲强制单片机复位,从而使单片机正常运行。三、看门狗

    2022年6月9日
    22
  • Kafka集群扩容「建议收藏」

    Kafka集群扩容「建议收藏」Kafka集群的服务发现是有zk实现的,因此想kafka集群添加新的broker就非常容易。我们只需要为新的broker设置一个唯一的broker.id,然后启动新增的kafka就行。Kafka集群会自动发现新增的broker并同步原数据,包括当前集群有哪些topics以及topics的分区信息等。但是我们需要的注意的一点,新增的broker不能分担之前已经创建的topic的负载,必须手动执行…

    2022年5月16日
    42
  • python randint函数用法_python scipy stats.randint用法及代码示例「建议收藏」

    均匀离散随机变量。作为一个实例rv_discrete类,randint对象从中继承了通用方法的集合(完整列表请参见下文),并使用特定于此特定发行版的详细信息来完善它们。注意:的概率质量函数randint是:对于k=low,…,high-1。randint需要low和high作为形状参数。上面的概率质量函数以“standardized”形式定义。要转移分布,请使用loc参数。特别,r…

    2022年4月12日
    95

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号