2012-09-26 49 views
0

我正在使用Mac OS X Lion版本10.8。我通過XAMPP安裝了MySQL。我已經將mysql和jdbc驅動程序(5.1.22)添加到了我的類路徑中。下面簡單的代碼是不工作:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信鏈接

package learning.database; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 
import java.sql.Statement; 

public class Simple { 

Connection getConnection() throws SQLException{ 
String url = "jdbc:mysql://localhost/"; 
return DriverManager.getConnection(url, "username", "password"); 
} 

void createDatabase(String database, Connection conn) throws SQLException{ 
Statement stmt = null; 
try { 
stmt = conn.createStatement(); 
stmt.executeUpdate("drop database if exists "+database); 
stmt.executeUpdate("create database "+database); 
}finally { 
if(null != stmt) 
stmt.close(); 
} 
} 

public static void main(String args[]) throws Exception{ 
String school = "school"; 
Classroom cr = new Classroom(); 
Connection conn = cr.getConnection(); 
cr.createDatabase(school, conn); 
} 
} 

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

Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: 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. 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1117) 
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:350) 
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2408) 
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2445) 
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2230) 
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:813) 
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399) 
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:334) 
at java.sql.DriverManager.getConnection(DriverManager.java:582) 
at java.sql.DriverManager.getConnection(DriverManager.java:185) 
at learning.database.Classroom.getConnection(Classroom.java:43) 
at learning.database.Simple.main(Simple.java:33) 
Caused by: java.net.ConnectException: Connection refused 
at java.net.PlainSocketImpl.socketConnect(Native Method) 
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351) 
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213) 
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200) 
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432) 
at java.net.Socket.connect(Socket.java:529) 
at java.net.Socket.connect(Socket.java:478) 
at java.net.Socket.<init>(Socket.java:375) 
at java.net.Socket.<init>(Socket.java:218) 
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:259) 
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:300) 
... 16 more 

有誰知道如何解決這個問題?

+0

感謝您的鏈接!投票。 – kasavbere

回答

3

我終於想通了。感謝Max和Yogendra發佈。 問題原來是我的XAMPP配置。要修復它,我做了如下:

- sudo vi /Applications/XAMPP/etc/my.cnf 
⁃ scroll down to `skip-networking` 
⁃ comment it out by changing it to `#skip-networking` 
⁃ save the changes. 
⁃ restart mysql from XAMPP Console 

然後我運行我的代碼,一切都很好!

0

請使用mysql-connector-java-5.1.10-bin.jar或以上版本的MySQL數據庫。以下是正確的代碼。從jdbc更改導入語句。例如。 import com.mysql.jdbc.Connection;並導入com.mysql.jdbc.Statement; 而不是 import java.sql.Connection;並導入java.sql.Statement;

您需要使用Class.forName(驅動程序)爲MySQL加載類驅動程序。使用下面的代碼它將工作。

  Connection conn = null; 
      String url = "jdbc:mysql://localhost:3306/"; 
      String dbName = "databaseName"; 
      String driver = "com.mysql.jdbc.Driver"; 
      String userName = "root"; 
      String password = "root"; 
      try 
      { 
        Class.forName(driver).newInstance(); 
        conn = (Connection) DriverManager.getConnection(url 
            + dbName, userName, password); 
        Statement stmt = (Statement) conn.createStatement(); 
      } catch (Exception e) 
      { 
        e.printStackTrace(); 
      } 
+0

這不起作用。我犯了同樣的錯誤。 – kasavbere

+0

Class.forName(driver).newInstance();將加載驅動程序,並在您的代碼中缺少此語句。 –

相關問題