遠程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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM