2012-05-21 22 views
6

¿Puedo acceder a una base de datos SQL remota (en un servidor web) directamente desde un programa de Android? es decir, ¿simplemente abre la conexión con todos los parámetros necesarios y luego realiza una consulta SQL?Acceso de Android a la base de datos SQL remota

Este es un programa privado (no disponible al público) solo disponible en teléfonos específicos, por lo que no me preocupan los terceros que obtengan acceso a la base de datos.

En caso afirmativo, ¿qué bibliotecas necesito en Java?

Gracias.

Respuesta

18

Esta pregunta ha aparecido varias veces. PROBABLEMENTE puede conectar su dispositivo Android al servidor SQL directamente si implementó los controladores MSSQL JDBC en su dispositivo Android y luego expuso su servidor SQL directamente a Internet. Si los controladores MSSQL funcionarían correctamente en Android es un problema completamente diferente.

Así es como puede ser capaz de hacerlo. Sin embargo, aquí es por qué esa es una mala idea.

  1. Está exponiendo su servidor SQL directamente a internet. A menos que encripte los datos entre su servidor MSSQL y su dispositivo Android, sería relativamente fácil para un hacker determinado oler el flujo de datos TDS entre el dispositivo y MSSQL e invertirlo y robar sus datos. El cifrado probablemente hará que sea mucho más difícil y casi imposible para un atacante robar sus datos. Sin embargo, un atacante aún podría lanzar un ataque DOS/DDOS en su base de datos directamente. ¡No es una buena idea!

  2. Si planea conectar otros dispositivos móviles (iPhone, Symbian, BlackBerry, etc.), también deberá poder crear una conexión SQL desde esos dispositivos. iPhone no admite Java de forma nativa (desde mi memoria), por ejemplo, por lo que necesitaría encontrar una forma de conectar iPhone al servidor SQL. BlackBerry podría ser más fácil, pero Symbian no va a tener suerte. Por lo tanto, deberá crear casi una solución personalizada para cada dispositivo que se conecte a su base de datos. CARGAS mala idea de mantenimiento

Crear un servidor de servicio web o la costumbre de TCP/IP que puede manipular a su base de datos. Conéctese a este servicio/servicio web desde su dispositivo. Los servicios web son el camino a seguir. Más del 90% de los dispositivos actualmente son nativamente capaces de realizar una llamada al servicio web.

+0

brillante, gracias. – WaterBoy

+0

@dcaswell Gracias por elegir eso lo aclaró un poco más. – Namphibian

4

Creo que tiene que usar el servicio web para comunicarse con una base de datos SQL. puede definir métodos generales como runSomeScalarQuery o runOneTabularQuery y ... en ese servicio web y enviar respuestas a la base de datos a través de un protocolo auto definido como un objeto auto definido.

0

Es una práctica muy mala, pero si la necesita para realizar pruebas o si no tiene otra opción, aún es posible conectarse a una base de datos externa. Y funcionará bien en la mayoría de los casos si el acceso a los datos no es demasiado pesado.

  • descargar el controlador desde aquí: http://dev.mysql.com/downloads/connector/j/3.0.html (hay algunos más nuevos, pero éste está funcionando perfectamente)
  • si su proyecto tampoco tienen una carpeta "libs", cree ahora.
  • descomprima el archivo que descargó y copie el archivo mysql-connector-java-3.0.17-ga-bin.jar en la carpeta libs
  • agregarlo a la trayectoria de la estructura:
    • clic derecho en el proyecto> Vía de construcción> Configurar Vía de construcción
    • Tab Bibliotecas> Agregar archivo JAR
    • Examinar para LIBS carpeta y seleccione el archivo jar
  • Una vez que esté listo, podemos seguir adelante con la programación. Como sabemos, Android nos obliga a hacer el acceso a la red en un hilo separado, por lo que tenemos que elegir una forma de crear un hilo, por ejemplo, podemos usar un AsynkTask, y agregar nuestro código al método doInBackground.

    private static final String url = "jdbc:mysql://{URL_SERVER}/{BASE_DATOS}"; 
    private static final String user = "usuario"; 
    private static final String password = "contraseña"; 
    int count=0; 
    try { 
        // The newInstance() call is a work around for some broken Java implementations 
        //this creates some static objects that we need. 
        Class.forName("com.mysql.jdbc.Driver").newInstance(); 
        Connection con = DriverManager.getConnection(url, user, password); 
        Statement st = con.createStatement(); 
        ResultSet rs = st.executeQuery("QUERY"); 
        while (rs.next()) { 
          //in every iteration we have a result 
          //if query is a Select, for instance 
          //"select one_column, another_column from ..." 
          //remember that rs has functions such as 
          //rs.getString(0) 
          //rs.getDouble(1) 
          //etc, that get the index of the columns in the select 
          //and cast it to the specific type 
    
          //here we do whatever we need with the results, 
          //and probably keep track of the progress with something like 
         // publishProgress(++count); 
    
          // end early if asynctask was cancel() 
          if (isCancelled()) 
         break; 
    
        } 
    } 
    
    catch (Exception e) { 
    e.printStackTrace(); 
    } 
    
Cuestiones relacionadas