在我的主機上我已經安裝了Wamp,並且我可以使用PHP或瀏覽器進行連接。我的客戶端是一臺裝有Linux的虛擬機,我正嘗試連接主機上的數據庫以在其中添加一些條目。無法使用Java從VM連接到VM的mysql數據庫
這裏是我的代碼:
Connection conn = null;
try {
String url = "jdbc:mysql://192.168.1.236:8080/fps";
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection(url, "username", "password");
System.out.println("Database connection established");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (conn != null) {
try {
conn.close();
System.out.println("Database connection terminated");
} catch (Exception e) {}
}
}
我必須提到,我想在本地網絡進行連接,並且還我安裝WAMP到端口8080上工作(它可以上面看到)。另一件事是,在虛擬機上,我可以使用瀏覽器訪問數據庫。
上面的代碼生成錯誤:
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:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:526) at com.mysql.jdbc.Util.handleNewInstance(Util.java:400) at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1038) at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:628) at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1014) at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2249) at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2280) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2079) at com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:794) at com.mysql.jdbc.JDBC4Connection.(JDBC4Connection.java:44) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:526) at com.mysql.jdbc.Util.handleNewInstance(Util.java:400) at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:325) at java.sql.DriverManager.getConnection(DriverManager.java:571) at java.sql.DriverManager.getConnection(DriverManager.java:215) at DatabaseConnection.main(DatabaseConnection.java:12) Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost. at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2926) at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:560) ... 16 more
我相信問題可能是從MySQL的客戶端上的設置,在文件/etc/mysql/my.cnf,但我真的不知道如何改變他們,因爲我沒有找到這個特殊情況的例子。我還認爲,當mysql正常使用3306時,將端口更改爲8080可能會導致問題。
所以,問題是,我怎麼能做到這一點?謝謝。
編輯:我也想補充說,端口更改(到8080)是在服務器上的Apache的conf文件中進行的。這個默認是80.所以也許它不應該影響mysql的3306。
問題去掉
:8080
可能在網絡通信。確保你能ping通主機並確保在8080端口上運行mysql。 – Sridhar怎麼樣mysql-connector.jar文件?你添加了嗎? – Anptk
我認爲mysql的端口是從3306到3309 – Anptk