远程mysql_java.sql.SQLException: null, message from server: "Host 'xxx' is not allowed to connect

最近在做一个项目,里面要用到远程mysql数据库。

我想把我想要实现的功能说一下吧:

1 /**
2          * 是这样的功能:我的机器是A,我现在先利用我自己写的一个jdbc方法<br>
3          * 调用远程的机器B上安装的数据库<br>
4          * 然后把我想要CRUD操作B机器上的数据库<br>
5          * 或者简单一点,可以这样认为,我现在在机器A上面有一些数据<br>
6          * 我要把这些数据插入到远程的机器B的mysql数据库里面去<br>
7          * 就是这样的操作<br>
8          */

效果图如下:

下面是我在机器A上面写的测试类:

  1 /**
  2  * 
  3  */
  4 package edu.gzucm.thms.utils;
  5 
  6 import java.sql.Connection;
  7 import java.sql.DriverManager;
  8 import java.sql.PreparedStatement;
  9 import java.sql.SQLException;
 10 import java.util.Calendar;
 11 
 12 /**
 13  * @author Hongten</br>
 14  * @date 2012-10-18
 15  * 
 16  */
 17 public class SendData {
 18 
 19     public static int sendDate2Server(String ip, String port,
 20             String databaseName, String userName, String passwrod,String receiver,String content) {
 21         int flag = 0;
 22         try {
 23             // 加载MySql的驱动类
 24             Class.forName("com.mysql.jdbc.Driver");
 25         } catch (ClassNotFoundException e) {
 26             System.out.println("找不到驱动程序类 ,加载驱动失败!");
 27             e.printStackTrace();
 28         }
 29         // 连接MySql数据库,用户名和密码都是root
 30         String url = "jdbc:mysql://"+ip+":"+port+"/"+databaseName;
 31         System.out.println(url);
 32         String username = "root";
 33         String password = "root";
 34         String sql = getSQL(receiver, content);
 35         Connection conn = null;
 36         PreparedStatement pstmt = null;
 37         try {
 38             conn = DriverManager.getConnection(url, username, password);
 39             pstmt = conn.prepareStatement(sql);
 40             flag = pstmt.executeUpdate(sql);
 41         } catch (SQLException se) {
 42             System.out.println("数据库连接失败!");
 43             se.printStackTrace();
 44         }
 45         if (pstmt != null) { // 关闭声明
 46             try {
 47                 pstmt.close();
 48             } catch (SQLException e) {
 49                 e.printStackTrace();
 50             }
 51         }
 52         if (conn != null) { // 关闭连接对象
 53             try {
 54                 conn.close();
 55             } catch (SQLException e) {
 56                 e.printStackTrace();
 57             }
 58         }
 59         return flag;
 60     }
 61     
 62     public static String getSQL(String receiver,String content){
 63         /**
 64          * 下面是一些常量设置: retrytimes=0 pri=1 inpool=0 sendmode=1
 65          * sendtime和inserttime的格式是:2011-05-03 18:55:20
 66          */
 67         String now = getNow();
 68         return "insert into sms_boxsending(sender,receiver,content,sendtime,inserttime,retrytimes,pri,inpool,sendmode)values('system','"+receiver+"','"+content+"','"+now+"','"+now+"','0','1','0','1')";
 69     }
 70     
 71     /**
 72      * 获取当前时间,并格式化时间
 73      * 
 74      * @return 格式化当前的时间
 75      */
 76     public static String getNow() {
 77         Calendar calendar = Calendar.getInstance();
 78         int year = calendar.get(Calendar.YEAR);
 79         int month = calendar.get(Calendar.MONTH);
 80         int day = calendar.get(Calendar.DAY_OF_MONTH);
 81         int hour = calendar.get(Calendar.HOUR_OF_DAY);
 82         int min = calendar.get(Calendar.MINUTE);
 83         int sec = calendar.get(Calendar.SECOND);
 84 
 85         Object monthString = (month < 10) ? "0" + month : month;
 86         Object dayString = (day < 10) ? "0" + day : day;
 87         Object hourString = (hour < 10) ? "0" + hour : hour;
 88         Object minString = (min < 10) ? "0" + min : min;
 89         Object secString = (sec < 10) ? "0" + sec : sec;
 90 
 91         return "" + year + "-" + monthString + "-" + dayString + " "
 92                 + hourString + ":" + minString + ":" + secString;
 93     }
 94     
 95     public static void main(String[] args) {
 96         //这里是调用远程机器B的mysql数据库
 97         System.out.println(sendDate2Server("210.38.111.34", "3306", "messagecat", null, null,"1342360****","this is a test 短信"));
 98         //这是测试本地的
 99         System.out.println(sendDate2Server("localhost", "3308", "messagecat", null, null,"1342360****","this is a test 短信"));
100     }
101 }

结果是这样的:

那我们应该怎样解决这个问题呢?

我也是查了一下资料,才把这个问题给搞定的。。。。

其实道理很简单,也就是说,远程的机器B不允许机器A访问他的数据库。也就是说,我们要解决这个问题,就是要让机器B的数据库允许

机器A访问,就搞定啦;

操作步骤也是很简单的:

一:打开mysql控制台,输入:

1 use mysql;
2 
3 show tables;

二:输入:

1 select host from user;
2 
3 update user set host ='%' where user ='root';

三:进入计算机的服务界面,重新启动mysql服务就搞定啦。。

四:下面是运行效果图:

返回值都为1,说明,程序运行正常....同时也祝你好运....

还有跟多方法:http://hi.baidu.com/soutnila/item/5356f2c0002781bf0d0a7bae

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术小黑屋

探究Java中的克隆

克隆,想必大家都有耳闻,世界上第一只克隆羊多莉就是利用细胞核移植技术将哺乳动物的成年体细胞培育出新个体,甚为神奇。其实在Java中也存在克隆的概念,即实现对象的...

9120
来自专栏技术小黑屋

一个事半功倍的Java反射库

在Java和Android中,我们常常会使用反射来达到一些兼容的目的。Java原生提供的反射很是麻烦,使用起来很是不方便。比如我们想要调UserManager的...

15820
来自专栏极客编程

Java为Hyperledger Fabric(超级账本)开发区块链链代码智能合约之环境部署

您或许听说过区块链,但可能不确定它对 Java™ 开发人员有何用。本教程将帮助大家解惑。我将分步展示如何使用 Hyperledger Fabric v0.6 来...

42920
来自专栏奔跑的蛙牛技术博客

分布式对象之客户\服务器角色以及RMI初探

程序员希望通过无所不在的java对象来作为所有问题的解决之道,思想就是通过网络请求相互协作。我可以调用一个远程对象帮我得到我所要的信息,并作为响应的一部分返回

21410
来自专栏奔跑的蛙牛技术博客

什么是字节码?

字节码(Byte-code)是一种包含执行程序,由一序列 op 代码/数据对组成的二进制文件,是一种中间码。字节是电脑里的数据量单位。

57330
来自专栏技术小黑屋

理解Java中的ThreadLocal

提到ThreadLocal,有些Android或者Java程序员可能有所陌生,可能会提出种种问题,它是做什么的,是不是和线程有关,怎么使用呢?等等问题,本文将总...

11440
来自专栏技术小黑屋

深入探索Java 8 Lambda表达式

本文为 InfoQ 中文站特供稿件,首发地址为:http://www.infoq.com/cn/articles/Java-8-Lambdas-A-Peek-U...

19130
来自专栏技术小黑屋

详解Java中的注解

在Java中,注解(Annotation)引入始于Java5,用来描述Java代码的元信息,通常情况下注解不会直接影响代码的执行,尽管有些注解可以用来做到影响代...

11610
来自专栏奔跑的蛙牛技术博客

java基本程序设计

保护对象实例域,提供黑盒的概念保护数据域的安全,体现了面向对象思想。数据>算法的思想

11620
来自专栏极客编程

用Java为Hyperledger Fabric(超级账本)开发区块链智能合约链代码之部署与运行示例代码

您已经定义并启动了本地区块链网络,而且已构建 Java shim 客户端 JAR 并安装到本地 Maven 存储库中,现在已准备好在之前下载的 Hyperled...

51510

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励