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.