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.

No hay comentarios: