miércoles, 23 de mayo de 2007

! rápido con groovy ! más sobre conectividad

Encapsular la conectividad

En el primer intento por encapsular mi único esfuerzo por parametrizar es el usuario y el password de acceso a la base de datos. La conexión sigue destinada a un servidor y a una base de datos determinados en la variable url. Además la base de datos debe ser MySql. El método connect será el encargado de iniciar la conexión.

  1   import groovy.sql.Sql
  2 
  3 
  4   class Connection {
  5 
  6     def db
  7 
  8     def driver = 'com.mysql.jdbc.Driver'
  9 
 10     def url = 'jdbc:mysql://localhost:3306/mySql'
 11 
 12     def connected = false
 13 
 14     boolean connect(user,password) {
 15       try {
 16         if(connected) disconnect();
 17         db = Sql.newInstance(url,user,password,driver)
 18         connected = true
 19 
 20       } catch(Exception ex) {
 21         db = null
 22         connected = false
 23       }
 24 
 25       return connected
 26     }
 27 
 28 
 29     void disconnect() {
 30       db.close()
 31     }
 32   }
 33 
 34 
 35   // -- código de prueba
 36   Connection myConection = new Connection()
 37 
 38   if(myConection.connect('root','admin')) {
 39     println 'Conectado a MySql'
 40     myConection.disconnect()
 41   }

El tipo de base de datos: MySql, Oracle, DB2, SqlServer, etc. al cual se destina la conectividad está definido en las variables driver y url. Se me ocurre que debe haber un método, al que llamaré setServer(...) para definir dichos parámetros. Además si dejo que dicho método sea abstracto (por lo que la clase debe necesariamente ser abstracta), entonces podré crear subclases, conexiones concretas, orientadas a un determinados tipo de base de datos. La conexión base abstracta es la siguiente...

  1   import groovy.sql.Sql
  2 
  3 
  4   abstract class Connection {
  5 
  6     def db
  7 
  8     def driver
  9 
 10     def url
 11 
 12     abstract void setServer(strServer,strDB)
 13 
 14     boolean connected = false
 15 
 16     boolean connect(Server,DB,User,Password) {
 17       try {
 18         if(connected)
 29           disconnect()
 20         setServer(Server,DB)
 21         db = Sql.newInstance(url, User, Password, driver)
 22         connected = true
 23 
 24       } catch(Exception ex) {
 25         db = null
 26         connected = false
 27       }
 28 
 39       return connected
 30     }
 31 
 32 
 33     void disconnect() {
 34       db.close()
 35       db = null
 36     }
 37 
 38   }

A continuación una subclase concreta para conectarnos a MySql

  1   class MySqlConnection extends Connection {
  2 
  3     void setServer(Server,DB) {
  4       driver = 'com.mysql.jdbc.Driver'
  5       url = "jdbc:mysql://$Server:3306/$DB"
  6     }
  7 
  8   }

A continuación una subclase concreta para conectarnos a MS SqlServer

  1   class SQLSERVERConnection extends Connection {
  2 
  3     void setServer(strServer,strDB) {
  4       driver = 'com.microsoft.jdbc.sqlserver.SQLServerDriver'
  5       url = "jdbc:microsoft:sqlserver://$strServer:1433; databaseName=$strDB"
  6     }
  7 
  8   }

Para conectarse a SqlServer es prerequisito que las localización de librerías msbase.jar, msutil.jar, mssqlserver.jar consten en la variable de sistema CLASSPATH. Esta librerías son parte de la instalación JDBC SqlServer descargable del portal de Microsoft.

lunes, 21 de mayo de 2007

¡ rápido con groovy ! Conéctese a la base de datos

el prerequisito...

Primero debe tener instaladas las librerías de conectividad JDBC para el sistema de base de datos remoto o local que va a utilizar. Para el caso de MySql, he instalado la librería correspondiente en el directorio:

C:\JAVALIBS\mysql-connector

el archivo "jar" que nos interesa es

mysql-connector-java-3.1.7-bin.jar

la localización de esta librería debe estar especificada en la variable de entorno CLASSPATH que sirve para proveer la lista de librerías Java disponibles en su entorno separadas por punto y comas. Asegúrese que se encuentre el archivo en mención, si no entonces colóquelo al final de la lista

... ; ... ; ... ; C:\JAVALIBS\mysql-connector\mysql-connector-java-3.1.7-bin.jar

está listo para conectarse a MySql desde groovy !

El siguiente código es suficiente para lograr la conexión a la base de datos

Conexión rápida a MySql

  1   import groovy.sql.Sql
  2 
  3   def url = 'jdbc:mysql://localhost:3306/mySql'
  4   def user = 'root'
  5   def password = 'admin'
  6   def driver = 'com.mysql.jdbc.Driver'
  7   def db = Sql.newInstance(url,user,password,driver)
  • url especifica el protocolo JDBC, la base de datos mysql, el servidor localhost, el puerto IP de comunicaciones 3306} y la base de datos mySql
  • User es el usuario definido para lase de datos
  • password es la clave de ingreso autorizada para el servidor y la base de datos especificada en el URL.
  • El driver hace referencia a la librería utilizada

La variable db sostendrá la conexión luego de ejecutarse el método Sql.newInstance. Con esta conexión se podrían ejecutar sentencias DDL como crear una base de datos, cambiar la base de datos activa, crear una tabla, etc. mediante el método execute. Con el método eachRow se pueden hacer consultas SQL así como otras operaciones.

  1 
  2   // crea una base de datos
  3   db.execute "create database myDB"
  4 
  5   // cambia de base de datos activa
  6   db.execute "use myDB"
  7 
  8   // realiza una consulta SQL
  9   db.eachRow("SELECT * FROM ....") { }
 10 
 11   // cierra la conexión
 12   db.close()

El problema es que el código de conectividad expuesto no está parametrizado y no es reutilizable, por lo tanto necesitamos... "encapsular" la conectividad

MIL DISCULPAS, el blog original estubo tan laaaaargo que debí cortarlo.