Archivo del Blog

sábado, 11 de julio de 2009

Groovy SQL

En la siguiente entrada se expondrá como entablar una conexión JDBC con Groovy, para llevar a cabo la siguiente explicación se utilizará a NetBeans 6.7 IDE, Groovy 1.5.7, la versión que viene por defecto en NetBeans, y la base de datos de ejemplo Sakila de MySQL.

El primer paso consiste en crear un proyecto Java en NetBeans: File | New Project...


En Categorías se selecciona Java y en Proyectos Java Application, a continuación se presiona Next.

En el segundo paso del asistente se asigna el nombre GroovySQL al proyecto además se ha retirado la selección de Create Main Class.

Al completar el asistente se habrá creado un proyecto vacío; se procede a crear un paquete java, se da click derecho sobre el nodo principal del proyecto New | Java Package, en el asistente se asigna el nombre org.ejemplo


Dentro del paquete se crea un Script Groovy, para ello se da click derecho sobre el nodo principal del proyecto New | Other..., en la primera ventana del asistente se selecciona Groovy en Categorías y Groovy Script en Proyectos.


Al finalizar el asistente el nuevo script se habra creado con la siguiente estructura:

package org.ejemplo
def name='edisson'

println "Hello $name!"

Se crea un usuario que tenga acceso a la base de datos sakila, como root en MySQL se crea al usuario groovy:

mysql> grant all on sakila.* to 'groovy' IDENTIFIED BY 'groovy';

Ahora se modifica el script GroovySQL de la siguiente manera:

package org.ejemplo

import groovy.sql.Sql

sql = Sql.newInstance("jdbc:mysql://localhost:3306/sakila", // URL
"groovy", // Usuario
"groovy", // Contraseña
"com.mysql.jdbc.Driver") // Driver de MySQL

println "id \t nombre"

sql.eachRow("select * from category", {
println it.category_id + "\t" + it.name }
);

En las creación de la instancia del objeto Sql, se hace referencia al driver MySQL, para agregarlo al proyecto se da click derecho en el nodo de Libraries y se selecciona Add Library.

En la ventana del asistente se selecciona MySQL JDBC Driver dentro de las librerias disponibles.


Al adicionar el driver de MySQL se procede a ejecutar el script, se obtendrá una salida similar a:


Además de seleccionar datos se puede realizar otras operaciones DML, en el caso de la inserción de datos se la puede realizar utilizando:

categoria = "Groovy"
sql.execute("insert into category (name) values ('${categoria}')")

Ejecutando esta sentencia se realizará la inserción de datos pero se nos mostrará una advertencia de seguridad similar a ésta:

ADVERTENCIA: In Groovy SQL please do not use quotes around dynamic expressions (which start with $) as this means we cannot use a JDBC PreparedStatement and so is a security hole. Groovy has worked around your mistake but the security hole is still there. The expression so far is: insert into category (name) values ('?')

Esta advertencia nos sugiere utilizar un modelo similar a PreparedStatement, la sentencia anterior de inserción debería ser realizada de la siguiente forma:

categoria = "Groovy"
sql.execute("insert into category (name) values (?)", [categoria])

La actualización de datos posee una sintaxis similar:

categoria = "Actualización Groovy"
sql.executeUpdate("update category set name = ? where category_id = 17", [categoria])

Por último, la eliminación de datos es similar a las dos sentencias anteriores:

sql.execute("delete from category where category_id = ?",[17])

jueves, 2 de julio de 2009

Python y MySQL en NetBeans 6.7

En esta entrada se explicará brevemente como conectarse a MySQL Server mediante Python, para llevar a cabo la explicación se utilizará a NetBeans 6.7 como IDE, la base de datos de ejemplo Sakila de MySQL y Python 2.6.2.

Lo primero que se debe realizar es instalar el paquete python-mysqldb, en Ubuntu se puede realizar la instalación mediante apt-get:

sudo apt-get install python-mysqldb

El paquete también puede ser encontrado en http://sourceforge.net/projects/mysql-python/.

Con python-mysqldb instalado, en NetBeans se procede a crear un proyecto Python, para el presente ejemplo se lo denominó SimpleMySQL y se utilizará la plataforma Python propia del sistema operativo.


Al finalizar el asistente se creará un archivo por defecto llamado simplemysql.py con la siguiente estructura:

# To change this template, choose Tools | Templates
# and open the template in the editor.

__author__="edisson"
__date__ ="$05/07/2009 05:23:25 PM$"

if __name__ == "__main__":
    print "Hello World";

Antes de realizar la conexión, se creará un usuario para que pueda acceder a la base de datos sakila, para ello como usuario root en MySQL creamos al usuario python mediante la sentencia:

mysql> grant all on sakila.* to 'python' IDENTIFIED BY 'python';

Con el usuario creado, reemplazamos el contenido de simplemysql.py por:

import MySQLdb

__author__="edisson"
__date__ ="$05/07/2009 05:23:25 PM$"


def conectar():
    db = MySQLdb.connect(host='localhost',user='python',passwd='python',db='sakila')
    cursor = db.cursor()
    sql = 'select * from country'
    cursor.execute(sql)
    paises = cursor.fetchall()
    print 'Listado de Paises'
    for pais in paises:
    print pais[0],'->',pais[1];

conectar()

Al ejecutar este archivo tendremos la siguiente salida:

Listado de Paises
1 : Afghanistan
2 : Algeria
3 : American Samoa
4 : Angola
5 : Anguilla
6 : Argentina
...

Un detalle importante que recalcar es el mensaje de advertencia mostrado al ejecutar simplemysql.py:

/var/lib/python-support/python2.6/MySQLdb/__init__.py:34: DeprecationWarning: the sets module is deprecated
from sets import ImmutableSet

Esto se debe a que se está empleando Python 2.6.2 con python-mysqldb 1.2.2.7ubuntu1, éste último debe ser utilizado con Python 2.5 sin embargo este error no es intrusivo y nos va a permitir trabajar normalmente. Para evitar este problema se puede trabajar con Python 2.5 o utilizar la versión 1.2.3 de python-mysqldb pero ésta todavía se encuentra en estado de Release Candidate.