Cómo conectar dos maquinas a una base de datos

Hola a todos, el problema q tengo es el siguiente: Tengo un aplicacion hecha en netbeans que usa una base de datos Mysql, y para ellos instale el Appserver, y todo me funciona perfecto en la pc que tengo el sistem y la base de datos, ahora me ha surgido una ampliación y necesito que otra pc con la misma aplicación se conecte a la base de datos, cómo podría realizar esto, muchas gracias estaré esperando sus respuestas.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

?

MySQL es multiusuario, simplemente apunta tu segunda aplicación a la misma instancia de MySQL y ya.

Tal vez tu verdadera duda no es cómo conectar dos aplicaciones distintas a la misma base de datos, sino cómo vas a lidiar con las broncas de concurrencia cuando ambas aplicaciones quieren modificar los mismos datos. O tal vez amanecí muy optimista y la duda es realmente cómo hacer que dos apps se conecten al mismo mysql...

Efectivamente mi duda es

Efectivamente mi duda es como conectar dos aplicaciones distintas a la misma base de datos, me podria colocar un ejemplo

Imagen de genitalico

que tal nunca e usando

que tal nunca e usando appserver pro yo andaba hace unos dias con algo parecido en ubuntu server.. si loq kieres es hacer la conexion en otra maquina tu usuario de mysql debera tener permisos de conexion remota algo asi deberia aparecer
usuario@%
me imagino que como esta en local todo no ay problema conectarte desde otra maquina tendrias que darle permiso de conexion a windows esto es debloquear el firewall q tengas antivirus,etc para que acepte esa conexion esto seria si esta default todo myslq se conecta por el puerto 3306
haciendo eso no creoq tengas problemas en tu red interna..
ahora si loq kieres es conectarte desde internet ps deberias abrir ese mismo puerto en tu router para q acepte una conexion entrante y creoq con eso kedaria..

pruebalo si no ps vuelve a preguntar aqui andamos salu2

Pregunta: ¡¿Como le hace

Pregunta: ¡¿Como le hace tu primera aplicación para conectarse a la base de datos en primer lugar?!

Lo más probable es que tengas en algun lugar una configuración donde le dices que servidor, puerto, usuario y password usas. ¿Correcto?

En caso de ser así, lo único que tienes que hacer es poner esa misma configuración en tu otra máquina y listo.

Si no es así, lo primero que tienes que buscar es donde se pone esta configuración.

 

Suerte.

Gracias por sus respuestas,

Gracias por sus respuestas, hestuve probando la respuesta de "genitalico", otorgandole permiso en el firewall de w7 y modifique la aplicación el código que se conecta a la base de datos

public String bd = "planilla";
public String login = "root";
public String password = "lu199803";
public String url = "jdbc:mysql://192.168.1.33:3306/"+bd;

estableci a la pc donde se encuentra la base de datos un ip estatica ya siempre apogo el router; la ip es la que se muestra y le puse el puerto "192.168.1.33:3306" espero se encuentre bien y he probado la aplicacion que vendria a ser el cliente q se encuentra en otra maquina y no se conecta; y eso de desbloquer el firewall del antivirus no se como hacer el antivirus que uso es smart security 4; y de la última respuesta me gustaria que me explique el código y gracias por sus respuestas y estaré esperando las que siguen.

¬¬

Primero responde: ¿Como le hace tu aplicación para conectarse actualmente?

Haz de cuenta que no sabemos absolutamente nada de tu aplicación, que no podemos ver el código, e imaginate que no sabemos que es lo que estas usando y que nos tienes que explicar como conectarnos ¿Que dirías? ¿Como nos explicarías la forma en la que te estas conectando?

Algo como "Estoy abriendo una conexion con JDBC usando DriverManager y luego etc. etc. y aqui está el código" O bien. "Estoy usando la clase "Conectarme" que hizo un amigo y que hace Xyz, etc."

¿Puedes poner un ejemplo básico de como te conectas? ( Quizá poner el código relevante en tu aplicación que establece la conexión )

Cuando puedas darnos esa información, te aseguro que estarás mucho más cerca de conectar la segunda PC que ahora.

Hasta entonces.

Gracias por la sugerencia y

Gracias por la sugerencia y aqui esta la clase que he creado la cual es conexion y si JDBC usando Driver Manager para mysql; y cada vez q necesito registrar o guardar hago la llamada a esta clase ,le agradesco por su tiempo:
 

Ok, ya entiendo. Te estas

Ok, ya entiendo.

Te estas conectando usando JDBC, con  . De hecho eso es lo que necesitaba saber, como te estas conectando.

Veo que los datos de conecxion ( usr, password, host y port ) los tienes como constantes. Siendo así, ejecutar directamente esta aplicación dentro de tu otra PC debería de funcionar sin problemas. Pero como NO está funcionando, tenemos que entender ( más bien tu, tienes que entender ) que es lo que dificulta la conexion.

En el código de manejo de excepciones tienes:

 

A eso se le llama "ignorar" la excepción Si incluyes la siguiente llamada:

 

El programa te va a mandar un mensaje muy detallado que lo que pasó y de por que no pudo conectarse.

Agrega esa línea y en pega acá lo que sale ( recuerda incluirlo entre los tags <code> y </code> para que le de formato )

Lo más probable es que ahi venga una explicación ( que quizá no te haga mucho sentido, pero algo dice ) de por que no se puede conectar. Quizá sea que no ve la máquina, que le rechaza o algo.

Ultima pregunta: La aplicación cuando SI se conecta, esta en la misma máquina que la bd?

Pega pues, el stacktrace y seguimos con esto.

Chau!

Efectivamente la aplicacion

Efectivamente la aplicacion se conecta pero cuando se emplea la "url=jdbc:mysql://localhost/"+bd;"

public String bd = "planilla";
public String login = "root";
public String password = "lu199803";
public String url = "jdbc:mysql://192.168.1.33:3306/"+bd;

entonces voy a probar lo que me dices y vendo con el resultado.

Mhh ya veo, entonces solo lo

Mhh ya veo, entonces solo lo hace cuando la aplicacion y la bd corren en la misma máquina.

Lo más probable es que tu otra máquina no pueda ver esa IP. Por cierto no hace falta "concatenar" la base de datos, por que ya la tienes como constante de todas formas:



 

Es exactamente lo mismo que:

 

No?? Pero bueno, de las mejoras podemos hablar después. Por lo pronto hay que ver por que no se conecta.

Esperamos el stacktrace.

Imagen de luxspes

RTFS: Las excepciones son tus amigas, usalas!

A eso se le llama "ignorar" la excepción

 

Y es lo que yo llamaria una muy mala practica de programación.

Si incluyes la siguiente llamada:

 

El programa te va a mandar un mensaje muy detallado que lo que pasó y de por que no pudo conectarse.

Agrega esa línea y en pega acá lo que sale ( recuerda incluirlo entre los tags code para que le de formato )

Muy buen consejo, seria mejor aun si usaras algo com SLF4J, pero con printStackTrace basta.

Mas info sobre la importancia del stacktrace aqui .

@luxspes Pues si, pero

@luxspes Pues si, pero sería mejor empezar con lo extra, extra básico no, crees? Yo pondría lo del SLF4J como un lujo, considerando todas las "areas de oportunidad" que el código tiene ahora mismo ( como   ) pero, vamonos por partes. ¡Primero que se conecte!. :) :)

Imagen de genitalico

se que ya lo dije.. pero ya

se que ya lo dije.. pero ya le diste permisos de conexion remota a tu usuario mysql? y asignaste los permisos de la BD al usuario que se conectara? porq me sucedio hace unos dias algo parecido y estaba en lo mismo por esa razon d permisos no podia conectarme..

y otra cosa q ondas con las bd y java ay muchos hilos en el foro con lo mismo jaja.... no esq estas en mi escuela y nos dejaron la misma tarea puff xD

noc q dice alguien q tenga mas experiencia en esto abrire un post nuevo recopilando lo que e llevado con mis conexiones a mysql y java..y nos echen la mano a todos ahi

salu2

Hola aqui esta el mensaje

Hola aqui esta el mensaje que sale de la excepcion:

run:
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.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:529)
at java.net.Socket.connect(Socket.java:478)
at java.net.Socket.(Socket.java:375)
at java.net.Socket.(Socket.java:218)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256)
at com.mysql.jdbc.MysqlIO.(MysqlIO.java:271)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2771)
at com.mysql.jdbc.Connection.(Connection.java:1555)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at control_plainlla.Cargo_Mantenimiento1.PrepararTabla(Cargo_Mantenimiento1.java:58)
at control_plainlla.Cargo_Mantenimiento1.(Cargo_Mantenimiento1.java:41)
at control_plainlla.Menu$50.run(Menu.java:1535)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

** END NESTED EXCEPTION **

Last packet sent to the server was 1 ms ago.
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2847)
at com.mysql.jdbc.Connection.(Connection.java:1555)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at control_plainlla.Cargo_Mantenimiento1.PrepararTabla(Cargo_Mantenimiento1.java:58)
at control_plainlla.Cargo_Mantenimiento1.(Cargo_Mantenimiento1.java:41)
at control_plainlla.Menu$50.run(Menu.java:1535)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Hubo un problema al intentar conectarse con la base de datos jdbc:mysql://192.168.1.33:3306/planilla

Imagen de ezamudio

listener

En PostgreSQL es común este problema cuando recién se instala una base de datos porque por default solamente recibe conexiones locales, hay que modificar la configuración para que acepte conexiones de fuera. Tal vez MySQL es similar, solamente acepta conexiones locales por default y hay que modificar su config para que acepte conexiones de fuera (que puede ser consecuencia de que el server escucha sólo en la interfaz de red lo0 y se le cambia a que escuche en todas las disponibles).

Acá hay un link de donde

Acá hay un link de donde podrias revisar en MySQL para que acepte conexiones desde fuera:

Dedicale un tiempo y podrás ver como configurar tu base de datos que actualmente NO esta aceptando conexiones remotas ( ni de Java ni de ningun otro )

Puede ser la configuración por default ( como dice EZamudio ) o el Firewall ( como dice Genitalico ) en ambos casos, lo que es seguro, y gracias al stacktrace, es que la máquina remota no está aceptando la conexion. Es decir, no es de Java la cosa, sino de MySQL/Windows.

Cuando termines dale una leida al link de luxspes sobre las excepciones.

Buen fin.

yo tengo un problemas similar

bueno yo tengo un problema similar tengo una aplicacion realizada en visual basic 2010 que interactua con sql server express 2005 mi forma de conexion es la siguiente :
Protected Function conectado()
Try
cnn = New SqlConnection("data source=(local);initial catalog=inventario; integrated security=true")
cnn.Open()
Return True

Catch ex As Exception
MsgBox(ex.Message)
Return False
End Try
End Function
Protected Function desconectado()
Try
If cnn.State = ConnectionState.Open Then
cnn.Close()
Return True
Else
Return False

End If
Catch ex As Exception
MsgBox(ex.Message)
Return False

End Try
End Function

funciona correctamente localmente el problema es que la aplicacion funcione en tres computadoras al mismo tiempo conectadose a la base de datos que esta en mi computadora como puedo resolver esto alguien me podria ayudar mil gracias

Conectate por alias no por IP

En lugar de hacer conexion a 123.123.123.123 mejor asignale un alias a la tabla de host de tu sistema operativo. supone que asignas:

 

de esa forma solo tendras que agregar esa linea en el host de las computadoras que uses (si no es que metes un DNS para que uses el FQDN). De esa forma una cadena de conexion (tomando la que vi que por ahi meten) quedaria:
 

Para el VB (pffft) se puede aplicar la misma solucion

Imagen de black_ice_gt

hola que tal

ojala alguien me pueda ayudar con un problema que tengo con un programa..
en mi computadora tengo un pequeño sistema de consultas, la base de datos esta montada en el PhpMyAdmin (sql) del Xampp. la interfaz grafica la tengo en java, pero ahora lo que quiero hacer es ese mismo tipo de consultas (solo lectura) pero desde otro ordenador (en red local), he leido muchos articulos en internet y aun no logro captar la idea de como hacerlo... no estoy seguro si necesito el Mysql server, y como configurarlo,

la conexion local con la base la hago asi:

public class ConexionDataBase{
public String db = "nombre-de-la-base";
public String url = "jdbc:mysql://localhost/"+db;
public String users = "root";
public String pass = "";

public ConexionDataBase (){

}
espero algun tipo de ayuda
Gracias...
NOTA: en una de las maquinas solo quiero hacer consultas de tipo solo lectura.

me han dicho que solo cambie este fragmento de codigo:

url="jdbc:mysql://localhost/"+db;

por este:

url="jdbc:mysql://192.168.23.11/"+db; donde: 192.168.23.11 es la ip de la otra maquina... pero no he tenido exito...

desactive el firewall de win en ambas maquinas pero ahora me sale este error:

java.sql.SQLException:null, message from server:"Host 'BLACK-ICE-PC.lan' is not allowed to connect to this

MySQL server"

ojala alguien me pueda ayudar.. gracias

trabajar la concurrencia

ezamudio que tal, se que el post es algo viejo, pero se me esta presentando este problema de la concurencia, tengo una aplicacion desktop que realice en eclipse hace un tiempo, mi aplicacion posee una clase conexion, que carga el driver y hace la conexion, de igual forma define los metodos para consultas y update., necesito distrubuir el jar en otras 3 maquinas, tecnicamente cada maquina al llamar la clase conexion abriria una conexion nueva, cuando realizo una consulta para actualizar o eliminar, cargo los datos que necesito, y cierro la conexion, cuando realice la actualizacion o la eliminacion vuelvo abrir la conexion y luego del proceso la cierro, es decir.. no es una conexion dedicada, la abro y la cierro segun lo que requiera la operacion... como puedo controlar la concurrencia en mi actual situacion? que debo modificar mi clase conexion , lo que no deseo es modificar cada una de las clases desarrolladas :

Cuando deseo hacer una consulta este es el codigo:
 

Imagen de ezamudio

bloqueos

Lee acerca de estrategias de bloqueo optimistas y pesimistas.