Conexión a MySQL desde Android con JDBC
Utilicé el siguiente código para conectar MySQL
en localhost
de Android. Sólo muestra las acciones dadas en la sección de captura. No sé si es un problema de conexión o no.
package com.test1; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class Test1Activity extends Activity { /** Called when the activity is first created. */ String str="new"; static ResultSet rs; static PreparedStatement st; static Connection con; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final TextView tv=(TextView)findViewById(R.id.user); try { Class.forName("com.mysql.jdbc.Driver"); con=DriverManager.getConnection("jdbc:mysql://10.0.2.2:8080/example","root",""); st=con.prepareStatement("select * from country where id=1"); rs=st.executeQuery(); while(rs.next()) { str=rs.getString(2); } tv.setText(str); setContentView(tv); } catch(Exception e) { tv.setText(str); } } }
Cuando este código se ejecuta muestra "nuevo" en el avd.
- Subir una imagen de Android a la base de datos MySQL
- ¿Es FCM (firebase cloud messaging) Token para un dispositivo o para una cuenta?
- Código de Perl en Android
- Acceso y almacenamiento de gran cantidad de datos desde el servidor mysql
- JSON problema de análisis no resuelto
java.lang.management.ManagementFactory.getThreadMXBean, referenced from method com.mysql.jdbc.MysqlIO.appendDeadlockStatusInformation Could not find class 'javax.naming.StringRefAddr', referenced from method com.mysql.jdbc.ConnectionPropertiesImpl$ConnectionProperty.storeTo Could not find method javax.naming.Reference.get, referenced from method com.mysql.jdbc.ConnectionPropertiesImpl$ConnectionProperty.initializeFrom
¿Alguien puede sugerir alguna solución? Y gracias de antemano
- Mejor tutorial para android PHP y mysql
- Valor siempre devuelve 0 donde debe devolver el número de fila insertada
- Implementación de mensajería de Google Cloud en Java con MySql
- ¿Cómo puedo iniciar sesión con facebook y obtener información de usuario para enviar mi db remoto desde la aplicación android
- Cómo almacenar únicamente un ID de registro de GCM en MySQL
- Android - Conectarse a la base de datos mySQL a través de LAN sin usar un servidor web
- JDBC vs Servicio Web para Android
- Android: Envío de datos para ser almacenados en MySQL
No puedes acceder a un BD de MySQL de forma nativa. EDIT: En realidad puede ser capaz de utilizar JDBC, pero no se recomienda (o no puede funcionar?) … ver Android JDBC no funciona: ClassNotFoundException en el controlador
Ver
http://www.helloandroid.com/tutorials/connecting-mysql-database
Android no puede conectarse directamente al servidor de base de datos. Por lo tanto, necesitamos crear un servicio web simple que pasará las solicitudes a la base de datos y devolverá la respuesta.
http://codeoncloud.blogspot.com/2012/03/android-mysql-client.html
Para la mayoría de los [buenos] usuarios esto podría estar bien. Pero imagina que consigues a un hacker que consigue un asimiento de tu programa. He descompilado mis propias aplicaciones y su miedo lo que he visto. ¿Qué pasa si reciben su nombre de usuario / contraseña a su base de datos y causar estragos? Malo.
Este código se ejecuta de forma permanente! Creado por diko (Turkey)
public void mysql() { try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } thrd1 = new Thread(new Runnable() { public void run() { while (!Thread.interrupted()) { try { Thread.sleep(100); } catch (InterruptedException e1) { } if (con == null) { try { con = DriverManager.getConnection("jdbc:mysql://192.168.1.45:3306/deneme", "ali", "12345"); } catch (SQLException e) { e.printStackTrace(); con = null; } if ((thrd2 != null) && (!thrd2.isAlive())) thrd2.start(); } } } }); if ((thrd1 != null) && (!thrd1.isAlive())) thrd1.start(); thrd2 = new Thread(new Runnable() { public void run() { while (!Thread.interrupted()) { if (con != null) { try { // con = DriverManager.getConnection("jdbc:mysql://192.168.1.45:3306/deneme", "ali", "12345"); Statement st = con.createStatement(); String ali = "'fff'"; st.execute("INSERT INTO deneme (name) VALUES(" + ali + ")"); // ResultSet rs = st.executeQuery("select * from deneme"); // ResultSetMetaData rsmd = rs.getMetaData(); // String result = new String(); // while (rs.next()) { // result += rsmd.getColumnName(1) + ": " + rs.getInt(1) + "\n"; // result += rsmd.getColumnName(2) + ": " + rs.getString(2) + "\n"; // } } catch (SQLException e) { e.printStackTrace(); con = null; } try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } else { try { Thread.sleep(300); } catch (InterruptedException e) { e.printStackTrace(); } } } } }); }
Si u necesidad de conectar su aplicación a un servidor que puede hacerlo a través de PHP / MySQL y JSON http://www.androidhive.info/2012/05/how-to-connect-android-with-php-mysql/ .Mysql El código de conexión debe estar en la clase AsynTask. No lo ejecute en el hilo principal.
¿Desea mantener su base de datos en dispositivos móviles? Utilice sqlite en lugar de mysql.
Si la idea es mantener la base de datos en el servidor y el acceso desde el móvil. Utilice un servicio web para buscar / modificar datos.
Otra solución es utilizar un controlador JDBC virtual que utilice una arquitectura de tres niveles: su código JDBC se envía a través de HTTP a un Servlet remoto que filtra el código JDBC (configuración y seguridad) antes de pasarlo al controlador MySQL JDBC. El resultado es enviado de vuelta a través de HTTP. Hay algunos software libre que utilizan esta técnica. Sólo Google "Android JDBC Driver sobre HTTP".
public void testDB() { TextView tv = (TextView) this.findViewById(R.id.tv_data); try { Class.forName("com.mysql.jdbc.Driver"); // perfect // localhost /* * Connection con = DriverManager .getConnection( * "jdbc:mysql://192.168.1.5:3306/databasename?user=root&password=123" * ); */ // online testing Connection con = DriverManager .getConnection("jdbc:mysql://173.5.128.104:3306/vokyak_heyou?user=viowryk_hiweser&password=123"); String result = "Database connection success\n"; Statement st = con.createStatement(); ResultSet rs = st.executeQuery("select * from tablename "); ResultSetMetaData rsmd = rs.getMetaData(); while (rs.next()) { result += rsmd.getColumnName(1) + ": " + rs.getString(1) + "\n"; } tv.setText(result); } catch (Exception e) { e.printStackTrace(); tv.setText(e.toString()); } }
Intente cambiar en el archivo gradle el targetSdkVersion a 8
targetSdkVersion 8
- ¿Emisión si un dispositivo bluetooth está conectando / desconectando?
- Uso del SDK de Android no veo ningún EXIF en mi JPEG