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.

 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

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

http://www.basic4ppc.com/forum/basic4android-getting-started-tutorials/8339-connect-android-mysql-database-tutorial.html

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 
  • Envío de mensajes (notificación) a un grupo - Android
  • JSONException: No hay valor para id
  • Cómo subir imágenes al servidor Php y almacenar en phpmyadmin
  • Android studio getSlotFromBufferLocked: error de búfer desconocido
  • Convertir PHP / MYSQL / sitio web existente en IOS Nativo / Aplicaciones de Android
  • Convierta un sitio web con un diseño de respuesta a la aplicación de Android
  • Firebase Big query - Cómo recuperar los datos de la tabla Eventos personalizados
  • Devolver una gota con json
  • Sqlite Añadir columna en la tabla en una posición determinada (Android)
  • Android: ¿Se admite JDBC en dispositivos Android?
  • ¿Cómo llegar desde un servidor MySql a una aplicación para Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.