2017-02-18 96 views
0

我创建了一个应用程序,该应用程序与笔记本电脑上的远程MySQL数据库进行通信。应用程序工作正常,当我使用我的本地连接是这样的:无法连接JavaFX应用程序中的远程MySQL数据库

public class DbConncetion { 
    public Connection Connect(){ 
     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
      Connection con= DriverManager.getConnection("jdbc:mysql://localhost:3306/cms?autoReconnect=true&useSSL=false","root",""); 
      return con; 
     } 
     catch(Exception ex){ 
      System.out.println(ex);  
     } 
     return null; 
     } 

} 

它的工作原理很好。但是当我使用的,而不是我的公网IP ADDRES“localhost”,则应用程序抛出:

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. 
java.lang.NullPointerException 

我在这个论坛上看起来很多,但我没有发现任何东西。我创建用户并给他在我的XAMPP MySQL中的所有特权那样:

This is pic from there

我配置路由器,但我不知道它是正确的: This is pic from there 任何人都可以告诉我,我走到哪里错了? 感谢提前:)

这是完整的堆栈跟踪: 牛逼

com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2088) 
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:806) 
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) 
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:410) 
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:328) 
    at java.sql.DriverManager.getConnection(DriverManager.java:664) 
    at java.sql.DriverManager.getConnection(DriverManager.java:247) 
    at DBconnection.DbConncetion.Connect(DbConncetion.java:24) 
    at javafxapplication1.Main1Controller.loadData(Main1Controller.java:208) 
    at javafxapplication1.Main1Controller.lambda$new$0(Main1Controller.java:232) 
    at com.sun.scenario.animation.shared.TimelineClipCore.visitKeyFrame(TimelineClipCore.java:239) 
    at com.sun.scenario.animation.shared.TimelineClipCore.playTo(TimelineClipCore.java:180) 
    at javafx.animation.Timeline.impl_playTo(Timeline.java:176) 
    at javafx.animation.AnimationAccessorImpl.playTo(AnimationAccessorImpl.java:39) 
    at com.sun.scenario.animation.shared.InfiniteClipEnvelope.timePulse(InfiniteClipEnvelope.java:110) 
    at javafx.animation.Animation.impl_timePulse(Animation.java:1102) 
    at javafx.animation.Animation$1.lambda$timePulse$25(Animation.java:186) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javafx.animation.Animation$1.timePulse(Animation.java:185) 
    at com.sun.scenario.animation.AbstractMasterTimer.timePulseImpl(AbstractMasterTimer.java:344) 
    at com.sun.scenario.animation.AbstractMasterTimer$MainLoop.run(AbstractMasterTimer.java:267) 
    at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:506) 
    at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:490) 
    at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$404(QuantumToolkit.java:319) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: 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:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) 
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:989) 
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:341) 
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2251) 
    at com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:2104) 
    ... 33 more 
Caused by: java.net.ConnectException: Connection refused: connect 
    at java.net.TwoStacksPlainSocketImpl.socketConnect(Native Method) 
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) 
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) 
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 
    at java.net.Socket.connect(Socket.java:589) 
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:211) 
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:300) 
    ... 35 more 

Feb 18, 2017 2:23:03 PM DBconnection.DbConncetion Connect 
SEVERE: null 
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) 
    at com.mysql.jdbc.Util.getInstance(Util.java:408) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:918) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:897) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:886) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860) 
    at com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:2163) 
+0

ping你的数据库,检查你的防火墙是不是阻止你 –

+0

究竟是怎么回事? ping哪个地址? –

+0

使这个问题成为公众IP的IP –

回答

0

您必须允许MySQL用户配置的应用程序的IP地址,你的PIC已屏蔽允许的IP,该IP必须是应用程序服务器IP。

如果从DB主机的同一本地网络运行Web应用程序,则无法连接到数据库主机的公共IP,但路由器不能简单地执行此操作。

因此,对于您的本地测试,您必须使用本地主机。

当您部署应用程序时,您必须使用公共。

顺便说一句,将mysql db端口暴露给internet并不是一个好习惯。

相关问题