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])

No hay comentarios.: