Conectar a base de datos aplic Android.

darkblade60

Buenas, lo que debería ser coser y cantar se me esta atascando, nunca he realizado una conexión con android a una base de datos, bueno el codigo es :

public void conectarBd(){
		
   
	Connection conn = null;
	String url = "jdbc:mysql://127.0.0.1:3306/";
	String dbName = "partyvalencia";
	String driver = "com.mysql.jdbc.Driver";
	String userName = "root";
	String password = "123456";
	String resultado;
	try{
		
		Class.forName(driver).newInstance();
		conn = DriverManager.getConnection(url+dbName,userName,password);
		Log.i("Conectado","Conectadito");
		
		
		Statement st =(Statement) conn.createStatement();
		ResultSet rs = st.executeQuery("select usuario from usuarios");
		
		while(rs.next()){
			
			resultado = rs.getString("usuario");
			Toast.makeText(this,resultado,Toast.LENGTH_SHORT).show();
			
			
		}
		
		conn.close();
	}
		catch (Exception e) {
			Toast.makeText(this,"ERROR",Toast.LENGTH_SHORT).show();
			Log.i("olakase",e+"");
		}
	
	
	
}

Vamos, no creo que tenga mucho fallo y seguramente sea algo externo, utilizo xampp, puedo a acceder al phpmyadmin etc.

Si pongo ip 127.0.0.1 ->
com.mysql.exceptions.jdbc4.ComunicationsException : Comunications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

Si pongo una IP erronea o localhost -> com.mysql.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.

Es decir, que detectar, detecta algo xd, debe ser algo de permisos, bloqueos o alguna pollada así imagino, sugerencias?

CrIpI

Si es igual que java:

Connection conexion = DriverManager.getConnection(url, user, password);

En la url prueba a poner el nombre de la BBDD:

jdbc:mysql://localhost:3306/nombre_base_datos

1 respuesta
darkblade60

#2 Pues con java lo he hecho alguna vez, y con php hace 2 días, no sepoquenova.

1 respuesta
Fastestwat

http://www.androidhive.info/2012/05/how-to-connect-android-with-php-mysql/

No se si te refieres a que has probado ya de conectar Android con PHP a una base de datos pero te lo dejo por aqui.

CrIpI

#3 Pero has probado a poner el nombre de la base de datos que deseas acceder despues de la ip?

CCiRviNe

Creo que el problema es el 127.0.0.1. Si lo estás haciendo desde Android (emulador/dispositivo) y entiendo que la base de datos de MySQL se encuentra en tu PC, Android se estará intentando conectar a una base de datos MySQL en el propio dispositivo, no a la IP de tu PC.

1 2 respuestas
darkblade60

#6 ostia xdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd suputamadre

es eso 100%

ahora despues comento, me cago en dioxxxx

JoseIM

#6 Que yo sepa 127.0.0.1 es igual que localhost ¿no?

edit: Leí mal tu post :D

1 respuesta
darkblade60

#8 Pero claro, yo lo ejecuto en el movil xdddd

darkblade60

Vale, ya he puesto la IP local de mi PC en este caso 192.168.1.11

Puedo accedeer a XAMPP desde el movil si meto la IP en el navegador (tocando una cosa de la seguridad), pero sigue sin funcionar la BD, he abierto el puerto 3306 y he creado un user nuevo de la base de datos que puede acceder desde cualquier red y nada :S

pd: al final voy a hacer una online que seguramente me de menos errores :S

1 respuesta
CCiRviNe

#10 me alegro que fuera eso xD. Hay una ip específica para que directamente coja la IP del ordenador de desarrollo (10.0.2.2): mira esto

He probado tu código y funciona correctamente, igual te falta algo de:

  • Permiso de INTERNET <uses-permission android:name="android.permission.INTERNET"/>
  • Ejecutar en un thread aparte
spoiler

Pero mejor que lo hagas con un web service con php o lo que sea.

1 2 respuestas
darkblade60

#11 muuchas gracias, cuando me ponga otra vez le hecho un vistazo ;)

darkblade60

#11 Ya me furula, i love u, el thread es necesario, pero porque exactamente? es decir, sin thread es verdad que me arriesgo a que la tarea tarde demasiado y salte el error de No responde, pero porque es obligatorio? en que tareas es 100% obligatorio? porque en esta parece que lo es :S

2 respuestas
CCiRviNe

#13 Si no recuerdo mal, a partir de la API 10 u 11, cualquier conexión con un sistema remoto requiere ejecutarse en un thread nuevo.

1 1 respuesta
10 meses después
naoz92

P E R fecto

Tig

#14 No lo requiere, pero es recomendable.

#13 Hay muchas librerías que funcionan con callbacks para hacer query/recibir resultados. Ellas se encargan de ejecutarlo en otro thread y tú lo recibes en el hilo principal.