今天下午學習了一下 JDBC,就想着試試在本地 PC 上訪問個人遠程服務器上的 MySQL 數據庫。這不試不知道,一試就是一下午啊,遇到了各類大大小小的問題,各類查資料,改來改去的。可搞死我了,趕忙寫篇博客記錄一下,把一些大問題記錄一下。html
JDK、MySQL 的安裝配置什麼的就不說了。java
我首先在本地編寫了一份 Java 代碼,以下:mysql
(這段代碼是從菜鳥教程copy過來的:www.runoob.com/java/java-m… 只是將 localhost 改爲個人服務器的 IP 了)web
import java.sql.*;
public class JDBCTest {
// JDBC 驅動名及數據庫 URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://遠程服務器IP:3306/mcl";
// 數據庫的用戶名與密碼,須要根據本身的設置
static final String USER = "用戶名";
static final String PASS = "密碼";
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try{
// 註冊 JDBC 驅動
Class.forName(JDBC_DRIVER);
// 打開連接
System.out.println("鏈接數據庫...");
conn = DriverManager.getConnection(DB_URL,USER,PASS);
// 執行查詢
System.out.println(" 實例化Statement對象...");
stmt = conn.createStatement();
String sql;
sql = "SELECT id, name, url FROM websites";
ResultSet rs = stmt.executeQuery(sql);
// 展開結果集數據庫
while(rs.next()){
// 經過字段檢索
int id = rs.getInt("id");
String name = rs.getString("name");
String url = rs.getString("url");
// 輸出數據
System.out.print("ID: " + id);
System.out.print(", 站點名稱: " + name);
System.out.print(", 站點 URL: " + url);
System.out.print("\n");
}
// 完成後關閉
rs.close();
stmt.close();
conn.close();
}catch(SQLException se){
// 處理 JDBC 錯誤
se.printStackTrace();
}catch(Exception e){
// 處理 Class.forName 錯誤
e.printStackTrace();
}finally{
// 關閉資源
try{
if(stmt!=null) stmt.close();
}catch(SQLException se2){
}// 什麼都不作
try{
if(conn!=null) conn.close();
}catch(SQLException se){
se.printStackTrace();
}
}
System.out.println("Goodbye!");
}
}
複製代碼
而後,在服務器上的 MySQL 數據庫新建了數據庫 mcl,在庫 mcl 新建一個 table websites,並插入了 5 條記錄。(固然,這些也都是照着菜鳥教程作的)sql
接下來,我就天真的,直接開始運行本地的 Java 代碼了,結果可想而知啦,怎麼可能這麼簡單嘛!!?TNND!!!數據庫
首先遇到的是 ClassNotFoundException。這個好說,就是沒有導入 JDBC connector 的 jar 包。先下載這個 jar 包,菜鳥教程也貼連接啦:static.runoob.com/download/my… 直接點進去下載就行了。下載完以後,將其導入到項目。編程
接下來就是服務器的問題了,服務器拒絕訪問,查了資料才知道,須要配置服務器的安全組,阿里雲服務器是這麼配的:vim
我覺得這個問題解決了我就能夠開開心心訪問數據,果真仍是太天真吶~問題3來啦!!安全
MySQL 默認是隻容許經過本地IP(localhost / 127.0.0.1)訪問,若是想要讓遠程設備訪問,須要修改 MySQL 的配置文件。bash
在終端下 cd 到目錄:/etc/mysql/mysql.conf.d,裏邊有下面這麼兩個文件,要修改的就是 mysqld.cnf
vim mysqld.cnf 編輯文件,把下面框框裏的註釋掉,而後保存。 還沒完,爲了讓訪問mysql的客戶端的用戶有訪問權限,能夠經過以下方式爲用戶進行受權: mysql> grant all on . to user_name@"%" identified by "user_password"; 上面的命令授予的用戶權限能夠訪問 mysql 中的任意數據庫(database)和表(table)。(這裏參考了:zhidao.baidu.com/question/28… ,真的很感謝這位大佬了~)
好了,終於能夠開開心心訪問遠程數據庫啦!!(忽略 WARN,不重要)
問題都解決了以後,,我又想試試經過 Navicat 遠程鏈接數據庫,因爲上面的問題都解決了,因此這個過程還比較順利的。
直接打開 Navicat,點擊鏈接,而後輸入服務器 IP,數據庫用戶名,密碼(數據庫的密碼,不是服務器的)。
而後就能夠開開心心地在本地直接進行插入、刪除等操做啦!原本下午是打算看編譯原理代碼的,本覺得我就試一下,應該挺快的,弄完了就去看代碼,結果emmmm......
不過呢,也學到了挺多東西的,對服務器、數據庫的配置有了更多瞭解,還學到了一丟丟 JDBC 編程!再者就是,遇到問題必定要多多查資料......
(好敷衍的總結,又沒人逼你寫......手動狗頭)
菜鳥教程:www.runoob.com/java/java-m…
navicat for mysql 怎麼鏈接遠程數據庫服務器:zhidao.baidu.com/question/28…
IDEA 引入 jar 包:blog.csdn.net/superinzagh…