最近在做一個項目,里面要用到遠程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