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

远程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开发_""和null的区别

    Hongten
  • Get the image file(s) some informations,Including the Make,Model,Date/Time,etc

    This is a blog about how to get the image file(s) some informations.Including th...

    Hongten
  • FreeMarker_模板引擎_代码自动生成器_源码下载

    你可以到freemarker的官网上去,那里有很详细的介绍:http://freemarker.org/

    Hongten
  • Java源码系列(4):String[]和List<String>的区别及相互转换

    Hello,everybody。好几天不见啦,原因是我家丽颖结婚了,打击太大,让我缓缓(emmmmmm,我才不会告诉你们是因为我懒)。咱今天说的是String[...

    陈琛
  • QQ小程序支付

    首先是配置类,设置为包内访问权限,其实应该放于properties文件,或者直接配置在xml中,偷了个懒直接写在了代码中

    WindrunnerMax
  • Flink DataStream 如何实现双流Join

    在离线 Hive 中,我们经常会使用 Join 进行多表关联。那么在实时中我们应该如何实现两条流的 Join 呢?Flink DataStream API 为我...

    smartsi
  • Java面试题_String 相加

    答: 第一条语句打印的结果为false,(1分) 第二条语句打印的结果为true,(1分) (1分)javac编译可以对字符串常量直接相加的表达式进行优化,...

    ChinaManor
  • 带闰年判断的正则表达式

    作者: xixigongzhu(夕夕公主) http://search.csdn.net/Expert/topic/1974/1974227.xml?temp=...

    Java架构师必看
  • Java String 类

    字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。

    奶油话梅糖
  • 这16条规范代码,同事,拍桌子 大喊 “666”

    背景:如何更规范化编写Java 代码的重要性想必毋需多言,其中最重要的几点当属提高代码性能、使代码远离Bug、令代码更优雅。2021金三银四Java面试宝典

    程序员白楠楠

扫码关注云+社区

领取腾讯云代金券