viernes, 17 de febrero de 2012

Conectar android a SQL Server 2008

Hace un par de semanas me di a la tarea de lograr conectar android a SQL Server, Oracle y mysql, ante la falta de información que existe en internet al respecto.

Escenario:
* Base de datos SQL Server 2008.
* Android API 2.2.
* Eclipse Helios Service Release 2.

De inicio intenté usar la conexión que implementa Alejandro Alcalde en su blog. En general me funcionó bien para ejecutar sentencias insert, upadte, delete, select. Pero cuando intenté usar los métodos first(), last(), etc, sobre el resultset devuelto por el servidor de base de datos, me daba el siguiente error:

unsupported method resultset.first()

Para  corregirlo probé la sentencia


Pero me arrojó el siguiente error: the incoming tabular data stream (tds) remote procedure call (rpc) protocol stream is incorrect

Probé todas las combinaciones posibles de esos 2 parámetros con el driver jdbc para sql server y no tuve resultados.

En definitiva decidí usar el driver jTDS que también me presentó el siguiente error: resultset may only be accessed in a forward direction. (Similar al error primero con el driver de sql server)

Entonces nada más cambié la instrucción anterior a esto:



1. Bajar el driver versión 1.2.5 http://jtds.sourceforge.net/
2. A continuación la clase de conexión:

31 comentarios:

  1. como saber cual es mi SERVER_IP y mi SERVER_PORT?

    ResponderEliminar
    Respuestas
    1. Amigo, disculpa la demora, el puerto e IP del servidor depende de lo que le definás vos. Sin embargo, por defecto SQL Server usa el puerto 1433... el IP es el que vos definás en el equipo donde instalás SQL Server.

      Eliminar
  2. Muchas gracias por tu blog, te hago una pregunta, como hago con url="..." cuando tengo un SQL Server Express el cual usa instancias en vez de puertos?
    Gracias

    ResponderEliminar
    Respuestas
    1. No estoy seguro, porque no lo he probado en Android, pero en PC tendrías que poner SERVIDOR/INSTANCIA y no haría falta indicar el puerto.

      Eliminar
    2. Buenas tardes, estoy tratando de conectarme a sql con una instancia y me sale este error
      E/ERRO﹕ Unknown server host name 'Host is unresolved: 192.168.1.175\mssqlserverr2'.
      Si alguno pudo resolver este problema se lo agradeceria.
      Gracias

      Eliminar
  3. Respuestas
    1. Mi correo es kevinfunezsoft@gmail.com
      Para que me puedas ayudar.

      Eliminar
  4. Hice todo lo que dices librería, código y nada.
    No se si puedes ayudarme.
    Necesito hacer un proyecto.
    Te lo agradeceré mucho.

    ResponderEliminar
  5. Hago todo tal cual y me lanza la excepción ClassNotFoundException al pasar por la línea.

    Class.forName(driver).newInstance();

    ¿Alguna idea?

    He realizado el mismo conector con una aplicación Java normal (no Android) y funciona perfectamente.

    Gracias por la ayuda

    ResponderEliminar
  6. Una vez que realice la conexión, como le hago para ejecutar stored procedures, y mostrar resultados como en un grid, estoy empezando con android y la verdad el sqlite no es mucho de mi agrado
    me gustaria saber si tienes algún ejemplo de ejecutar stored procedures.
    De antemano muchas gracias por su ayuda.

    ResponderEliminar
  7. Hola,

    Me baje las librerías y usé el código tal cual y me manda el siguiente error, estuve buscando y no encontré nada al respecto.

    Error occurred during initialization of VM
    java/lang/NoClassDefFoundError: java/lang/ref/FinalReference

    Saludos y Gracias.

    ResponderEliminar
  8. Hola,
    Llevo intentando horas hacer funcionar el driver y no lo consigo.
    Me da el siguiente error:

    11-13 18:01:31.973: E/AndroidRuntime(398): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{serviciocitas.miaplicacion/serviciocitas.miaplicacion.SQLServer}: java.lang.ClassCastException: serviciocitas.dalkom.SQLServer

    Se supone que es un error de conversión de Clase pero no se donde está el problema.
    He incluido el código de esta página en una clase llamada SQLServer y me he bajado la librería y he añadiro el archivo jtds-1.3.0.jar al proyecto. Desde la activity principal llamo a esta clase asi:
    Intent llamada = new Intent(getBaseContext(),SQLServer.class);
    startActivity(llamada);

    Y siempre me da el mismo error que no se depurar porque no me dice en que línea.
    ¿Alguien sabe porque me pasa esto y como solucionarlo?
    Un saludo y gracias.

    ResponderEliminar
    Respuestas
    1. Tu clase SQLServer.Class ¿hereda de Activity?
      ¿La declaraste en AndroidManifest.xml?
      ¿Tiene el metodo onCreate?

      Eliminar
  9. Hola:

    Para todos los que no encontraron el driver el nuevo link está en:

    http://sourceforge.net/projects/jtds/files/

    ResponderEliminar
  10. Una consulta, luego de bajarme el driver simplemente lo copio a la carpeta principal de mi aplicacion Android y deviera reconocerlo sin tener que importar nada mas?

    ResponderEliminar
  11. hola a todos, tengo que hacer una aplicacion android con conexion a una base de datos en mi localhost.
    quiero conectar la aplicacion a dicha base para almacenar y buscar luego elementos para poder hacer alguna accion con ellos. lo que me pasa es que no consigo la conexion a traves de JAVA y debo de hacerlo asi.
    tengo mi tabla usuarios en localhost... quien me ayuda??? un millon de gracias

    ResponderEliminar
  12. Vale desisto esto en android no funciona, la misma librería en java normal va pero en un proyecto android no soy capaz a hacerla funcionar nunca encuentra la clase.
    Importada a la manera clásica como librería externa e importada con el boton derecho añadir desde eclipse.

    Hasta haciendo trampas y declarando una variable del tipo net.sourceforge.jtds.jdbc.Driver da error diciendo que la clase no esta definida.

    java.lang.NoClassDefFoundError: net.sourceforge.jtds.jdbc.Driver

    Si alguien sabe como importar la librería para que la reconozca en un proyecto android por favor que haga un vídeo paso a paso.

    ResponderEliminar
  13. SOLUCION ClassNotFoundException EN ANDROID.
    Después de un día entero de pruebas lo he conseguido. Conecte desde Android con la base de datos.

    Paso 1: Tiren a la papelera la librería jtds 1.3 y descarguen la 1.2.5
    Paso 2: Agreguenla al proyecto como libreria externa.
    Paso 3: En Java Build Path busquen la pestaña Order and Export y marque en archivo jtds 1.2.5
    Paso 4: Ejecuten el programa, comprobando que en la carpeta bin/dexedLibs se añada una copia de la librería jtds.
    En caso contrario repitan los pasos 2 y 3.

    Con esto ya deja de dar el ClassNotFoundException odioso.

    Espero que les sirva de ayuda

    ResponderEliminar
  14. tengo el problema que no se conecta con android como lo puedo solucionar tengo el driver net.sourceforge.jtds.jdbc.Driver alguien me pueda ayudar

    ResponderEliminar
  15. Tengo la clase asi, cuando llega a este punto:

    Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();

    me sale el error de "No suitable driver"

    Alguien que me pueda ayudar con este problema

    Gracias de antemano

    ResponderEliminar
    Respuestas
    1. Agregaste en el Build Path la librería jtds?. Procura que sea la 1.2.5 o 1.2.7

      Eliminar
    2. String url = "jdbc:jtds:sqlserver://" + serv + ":" + porta + "/" + database;

      Eliminar
  16. Buenas amigo, si quisiera realizar una aplicación que solo modifique y verifique tendría que colocar los procedimientos en clases y que estos sean llamados de una activity ?

    Mis dudas serían:
    1.- Desde una activity se pueda llamar a una clase.

    Soy novato en programación.

    geekccs

    ResponderEliminar
  17. Buenas, probando a realizar un programa similar, me da un error que no sé muy bien como solucionar. A ver si alguien me lo podría resolver. Yo utilizo la librería de Microsoft, jdbc, y el Class.forName lo hace correctamente, pero a la hora de conectarme a través de DriverManager.getConnection..., me salta este error:

    Could not find class 'javax.sql.XAConnection', referenced from method com.microsoft.sqlserver.jdbc.SQLServerConnection.poolCloseEventNotify

    Alguien sabría como solucionarlo??

    ResponderEliminar
  18. y como se hace la consulta me tilda error saludos

    ResponderEliminar
  19. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  20. hola buenas tardes soy nuevo en lo que es programación móvil y no he podido realizar para insertar datos a la base de datos

    ResponderEliminar
    Respuestas
    1. Saludos Roylan. ¿Eso quiere decir que sí lograste hacer la conexión?

      Eliminar
  21. hola se puede ocupar este driver para hacerlo con mysql

    ResponderEliminar
  22. Buenas tardes, mis disculpas por tanta ausencia, debido a asuntos de trabajo. Alicia, yo, si mal no recuerdo, hace años lo intenté con mysql usando el jdbc driver para mysql y funcionó. Yo te sugiero intentarlo de esa manera.

    Saludos.

    ResponderEliminar
  23. se puede realizar en android estudio o solo en java.
    saludos

    ResponderEliminar