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.

domingo, 24 de mayo de 2009

Instalación de la base de datos de ejemplo Sakila en MySQL Server

En la siguiente entrada se revisará como instalar la base de datos de ejemplo Sakila para MySQL, se analizará dos maneras de hacerlo: la primera instalándola manualmente y la segunda como un plugin de NetBeans.

Instalación Manual.

El primer paso consiste en descargar los scripts de creación desde el sitio de MySQL: http://dev.mysql.com/doc/#sampledb.

MySQL nos ofrece un paquete que contiene tres archivos:

1. sakila-schema.sql

2. sakila-data.sql

3. sakila.mwb

El primero contiene el script de creación de la base de datos, el segundo los datos de las tablas y el tercero es el esquema gráfico de la base de datos en formato mwb, propio de MySQL Workbench.

Para crear la base de datos, ingresamos al cliente de línea de comandos de mysql:

mysql> mysql -u root -p

Creamos el esquema de la base de datos utilizando el script sakila-schema.sql:

mysql> source /sakila-db/sakila-schema.sql;

Insertamos los datos en las tablas ejecutando el script sakila-data.sql:

mysql> source /sakila-db/sakila-data.sql;

Con los pasos anteriores se habrá completado la instalación manual de sakila.

Instalación como plugin de Netbeans.

La base de datos Sakila también puede ser instalada desde NetBeans mediante el plugin denominado Sakila Sample Database, para ello en NetBeans nos dirigimos al Menú Tools / Plugins.

En la pestaña Avalaible Plugins y buscamos a Sakila Sample Database, si no se encuentra disponible se debe recargar el catálogo de plugins, y se procede a instalarlo.


Una vez instalado en la pestaña Services, se despliega Databases y en el nodo MySQL se da click derecho y se elige Create Database...


En la ventana de creación de base de datos se escoge como nombre de la nueva base de datos a Sample database: sakila y se procede a crear la base de datos.


Una vez finalizada, se habrá instalado la base de datos Sakila en MySQL Server además de una conexión en NetBeans para acceder a los datos de la misma.