¿Cómo conectar aplicación de escritorio a conexión remota mysql? [Solucionado]

Iniciado por 1mpuls0, 9 Julio 2013, 00:51 AM

0 Miembros y 1 Visitante están viendo este tema.

1mpuls0

Hola.

De qué forma se puede conectar una aplicación de escritorio a una base de datos que se encuentra en un hosting?.

Lo estoy intentando de la siguiente manera.

Código (java) [Seleccionar]

   private static String database="mibasededatos";
   private static String user="miusuario";
   private static String password="micontrasenia";
   private static String host="midominio.com:3306";
   private static String server="jdbc:mysql://"+host+"/"+database;

.....

      try {
           Class.forName("com.mysql.jdbc.Driver");
           conexion = DriverManager.getConnection(server,user,password);

           System.out.println("Conexión a base de datos "+server);

       } catch (ClassNotFoundException ex) {
           System.out.println("Error cargando el Driver MySQL JDBC");
       } catch (SQLException ex) {
           System.out.println(ex);
       }


Esta es la excepción que muestra.


com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:

** BEGIN NESTED EXCEPTION **

java.net.ConnectException
MESSAGE: Connection timed out: connect

STACKTRACE:

java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:337)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:198)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
at java.net.Socket.connect(Socket.java:579)
at java.net.Socket.connect(Socket.java:528)
at java.net.Socket.<init>(Socket.java:425)
at java.net.Socket.<init>(Socket.java:241)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:271)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2771)
at com.mysql.jdbc.Connection.<init>(Connection.java:1555)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
at java.sql.DriverManager.getConnection(DriverManager.java:579)
at java.sql.DriverManager.getConnection(DriverManager.java:221)
at topo.JTopo.jButton1ActionPerformed(JTopo.java:147)
at topo.JTopo.access$000(JTopo.java:19)
at topo.JTopo$1.actionPerformed(JTopo.java:64)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6504)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6269)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4860)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4686)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2713)
at java.awt.Component.dispatchEvent(Component.java:4686)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:680)
at java.awt.EventQueue$4.run(EventQueue.java:678)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)


** END NESTED EXCEPTION **



Last packet sent to the server was 2 ms ago.


Los datos de conexión están correctos, aunque tengo duda de como debo escribir el host al ser la aplicación de escritorio.
El JDBC también funciona correctamente.

Como podría hacerlo funcionar?, tengo que modificar algún archivo en mi hosting?, tengo que otorgar algún tipo de permiso del usuario que intenta conectar?, tengo que abrir algún puerto?.

Una solución que se me ocurre si lo anterior no es posible, es hacer peticiones a archivos .php por ejemplo desde mi aplicación de escritorio enviar por GET los datos a consultar, insertar o actualizar.

http://midominio/insertar.php?variable1=valor1&variable2=valor2

Como dato extra, les menciono que la aplicación la podría tener cualquier usuario, la aplicación no va dirigida a un grupo especifico de personas, lo menciono por si me dicen que tengo que agregar usuarios o ips.


Cualquier respuesta es buena xD.

EDITO

Problema real:
Mi problema fue que mi servidor tenía apagado el puerto para conexión remota. 3306

Solución:
Enviar un ticket para que el proveedor encendiera el puerto.

Saludos.
abc

Debci