2011-06-04 55 views
6

所以我將MySQL Connector/J 5.1.16添加到我的項目的構建路徑中。我正在使用默認的OSX Java包和MAMP Pro 1.9.4以及MySQL 5.1.44和Eclipse。在osx上使用jdbc將java連接到mysql

我已經建立了一個簡單的Java應用程序可以完成下列功能:

private static String dbUrl = "jdbc:mysql://127.0.0.1:3306/mpp"; 
private static String dbUsername = "root"; 
private static String dbPassword = "root"; 

private Statement statement = null; 

private void dbConnect() { 


try { 
    Class.forName("com.mysql.jdbc.Driver"); 
    Connection connection = DriverManager.getConnection(dbUrl, dbUsername, dbPassword); 
    statement = connection.createStatement(); 

} catch(SQLException e) { 
    System.err.print(e.getMessage() + " ARGH!"); 
} catch(Exception e) { 
    System.err.print(e.getMessage() + " FUUUUUUUUUU!"); 
} 
} 

當我運行它,我得到以下錯誤:

Communications link failure 

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. ARGH! 

我用Google搜索,搜查了大約一個小時沒有成功。有想法該怎麼解決這個嗎? JDBC驅動程序應該沒問題,我有點測試它。

編輯

我試圖通過控制檯

SnowCave:src stefanschipor$ java -cp $CLASSPATH test 

我得到相同的輸出如上

+0

也許是防火牆問題。 dbUrl是否正確?你能通過一些客戶端控制檯連接到MySQL嗎? – 2011-06-04 16:14:55

+0

在你的案例中,defaut port localhost:3306 – mKorbel 2011-06-04 16:18:20

+0

btw不錯的錯誤信息:P – RMT 2011-06-04 16:19:44

回答

13

好吧,這是愚蠢的。 :)

你已經打開MAMP,轉到服務器> MySQL並取消選中「僅允許本地訪問」,默認情況下選中。這是奇怪的,因爲我在做什麼是本地的,但無論如何...

我的程序似乎工作,@JamesA建議的命令也產生預期的輸出!

Huzzah!

+0

這對我有效。感謝您發佈解決方案! – Ian 2013-12-15 03:57:45

+0

可能是因爲您正在JDBC連接中使用錯誤的端口。例如,如果您正在使用MAMP,則端口可能是8889。這是我的確切問題,希望它有幫助。 – RHE 2014-05-13 14:10:26

+0

在MAMP PRO 3.3上,您必須*檢查*「允許網絡訪問MySql」並選擇「僅限於此Mac」。 – 2016-01-17 04:41:11

2

確定的MySQL在端口3306上運行運行此?


如果MySQL守護程序端口監聽3306 lsof -i :3306應該返回:

H 
5.5.969]G.Mw4??9cfUY?k!^:D&mysql_native_password 

其中5.5.969

COMMAND PID  USER FD TYPE  DEVICE SIZE/OFF NODE NAME 
mysqld 7616 username 10u IPv6 0x1fbf6940  0t0 TCP *:mysql (LISTEN) 

直接使用nc localhost 3306應該返回連接的端口是mysql的版本號。


您也可以嘗試一個工具,如DbVisualizer來測試您的連接URL。

+0

我關閉了防火牆,但是我啓用了它並允許Java。仍然一樣:) – GreenDude 2011-06-04 16:20:39

+0

我在終端中運行命令,但我沒有輸出。但是,端口應該沒問題,下面是我的MAMP配置的截圖http://grab.by/ahFv – GreenDude 2011-06-04 18:35:30

+0

'lsof -i:3306'的輸出是什麼? – jamesallman 2011-06-04 18:48:24

0

我在OSX上也有這個神祕的錯誤,並且在第一次發生錯誤時沒有找到任何解決方案。在我的情況下,如果數據庫結構被修改或表在開發過程中被刪除/創建(MySQL作爲JBoss的數據源),就會發生這種情況。在所有情況下,如果我在修改後關閉MySQL並在JBoss啓動之前重新啓動它,我可以避免該錯誤。

+0

重新啓動的MAMP,仍然沒有運氣:) – GreenDude 2011-06-04 16:20:12

0

您需要使用Port localhost:8889或您在MAMP> Settings> Ports> MySQL-Port中找到的任何端口。 然後您的連接將成功!