viernes, 4 de marzo de 2016

Depurar procedimientos almacenados en base de datos MYSQL


Luego de un buen tiempo fuera del blog por asuntos de tiempo, mucho trabajo. Acá estamos de nuevo.

En esta ocasión quiero hablar de la depuración (debugging) de procedimientos almacenados y funciones en MySQL.

Hace unos cuantos años atrás estaba trabajando en un proyecto cuya base de datos estaba en MySQL, por supuesto que habían procedimientos almacenados y funciones. En determinado momento que necesitaba correrlos en modo depuración y paso a paso, me encontré en una situación apremiante porque de hacer la depuración "a mano", tomaría mucho tiempo. Es entonces se hizo necesario alguna herramienta que permita realizar esta tarea de una manera más automatizada, rápida y sencilla. Cabe destacar que para otros motores de bases de datos (como Oracle) no es difícil contar con un depurador.

Estuve investigando en internet y no encontré mucho entonces, pero di con una herramienta llamada Debugger for MySQL. La descargué, instalé y me puse a depurar mis procedimientos almacenados, paso a paso. Me salvó la vida, me ahorró varias horas de depuración "a pie".

Luego de terminar ese proyecto con MySQL, pasé a trabajar con otros motores de bases de datos y dejé de usar dicha herramienta.

Pero justamente ahora estoy de nuevo trabajando en un proyecto con base de datos MySQL, y me he visto de nuevo en la necesidad de hacer depuración de procedimientos almacenados paso a paso.

Nuevamente buscando en internet no encuentro mucho, los más populares clientes de base de datos no tienen depurador para MySQL. Nuevamente vuelvo a instalar Debugger for MySQL, y nuevamente me ha salvado la vida. Repito: uso fácil, rápido, buena interfaz y te permite visualizar cómo van cambiando las variables en cada sentencia, se puede poner puntos de interrupción, ir paso a paso, y saltar hacia el llamado de otro procedimiento almacenado que se llame dentro del principal que estamos depurando.

Cuenta con las características siguientes:
  • Breakpoints
  • Watches
  • Expression Evaluator
  • SQL Window
  • Output
  • Call Stack
  • Autocomplete
  • Code parameters
  • MySQL Reference Manual
  • Introduce CURSOR Iteration command

Dejo algunas capturas de pantalla para ilustrar un poco: 

Acá la pantalla inicial donde se definen los parámetros y el llamado del procedimiento:



Esta es la pestaña donde está el procedimiento siendo depurado, pueden ver un breakpoint sombreado en color naranja.
 

Incusive podemos ejecutar consultas SQL sobre alguna tabla temporal, etc. en caso de que nos interese ver si se insertó, modificó algún registro en algún punto de nuestro procedimiento almacenado.


Como he mencionado antes, es realmente sencillo el uso de esta herramienta, a mí me bastó con leer la sección "Quick start" para empezar a utilizarlo.

NOTA: Algo que me parece importante es que he usado esta herramienta en ambiente windows y linux, porque trabaja bien con wine.

Les recomiendo visitar el website para que obtengan mayor información:

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:

miércoles, 15 de febrero de 2012

Conexión desde android a oracle

Este post lo hago porque me he sumado al esfuerzo y apoyo de Alejandro Alcalde del blog www.elbauldelprogramador.com, donde también se ha publicado este mismo post, acá, ya que él implementó la conexión de android con SQLSERVER 2008. En vista de que en internet casi no hay información de que alguien lo ha realizado, y para empeorar las cosas hay muchas afirmaciones de que no se  puede conectar android a ninguna base de datos, solamente con un webservice (y no se recomienda otra  forma que no sea esta). Yo encontré nada más el post de Alejandro Alcalde, a partir de ahí pude realizar la  conexión y me di a la tarea de implementarlo para oracle y mysql también y compartirlo con quien lo necesite.
(En este post tratamos el caso de oracle).

Escenario:
* Base de datos Oracle 10g.
* Android API 2.2.
* Eclipse Helios Service Release 2.

NOTA: Antes de lograr que funcionara tuve problemitas con encontrar la clase jdbc adecuada para conectarme. Probé las siguientes sin éxito: ojdbc5.jar y ojdbc6.jar. En el caso de la ojdbc5.jar yo la utilizo en una aplicación que hice anteriormente, conectándome a la misma base de datos, pero no me funciona con android en este caso.

Así que en el tercer intento con ojdbc14.jar acerté.

A continuación les detallo puntualmente la implementación de la clase:


1. Agregar al buildpath la librería ojdbc14.jar. La cual pueden bajar del siguiente enlace:

http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-10201-088211.html


2.  Clase de conexión:

***El esquema SCOTT viene con datos de prueba, cuando instalé mi base de datos.