jueves, 26 de julio de 2007

Acceso y abstracción de datos

El acceso a la base de datos suele ser un poco complicado y repetitivo, para manejar las cuestiones generales de datos podemos utilizar algunos patrones de diseño para generar clases que puedan encargarse de conectarse a las bases de datos y actualizar estas de la manera más abstracta posible, el primer paso para esto es la conexión de datos compartida.

Dado que en Java no existen variables globales, es necesario buscar otra aproximación para compartir la conexión a lo largo de toda la aplicación, el modelo Singleton puede ayudarnos en esto, en este modelo existe una clase de la que solamente puede existir un elemento en un determinado momento. Un singleton sencillo podría verse más o menos de la siguiente forma.


public class ConexionDB {
private static ConexionDB instance = null;
private Map conexiones;

//El acceso privado hace imposible instanciar directamente esta clase
private ConexionDB() {
conexiones = new LinkedHashMap();
}

//Si requerimos una instancia de la clase deberiamos llamar a este metodo
private static ConexionDB getInstance() {
//LazyInstancing. Creamos el objeto hasta que se necesita
if(instance == null)
instance = new ConexionDB();
return instance;
}

public Connection getIConnection(String driver, String uri, String user, String pass) {
try {
//Verificamos si la conexión no existe ya en Cache
if(conexiones.hasKey(uri))
return (Connection) conexiones.get(uri);

Class.forName(driver);
Connection c = DriverManager.getConnection(uri, user, pass);
conexiones.put(uri, c);

return c;
} catch(Exception e) {
return null;
}
}

//Simplificamos las llamadas para no depender del Singleton en código general
public static Connection getConnection(String driver, String uri, String u, Stirng p) {
return ConexionDB.getInstance().getIConnection(driver, uri, u, p);
}

//Generalmente siempre se usa una sola conexión a DB por default
public static Connection getDefaultConnection() {
return ConexionDB.getInstance().getIConnection("sun.jdbc.odbc.JdbcOdbcDriver",
"jdbc:odbc:osos", "sa", "admin");
}
}


Para utilizar la conexión en otra clase solamente utilizariamos código sencillo:


Connection c = ConexionDB.getConnection("driver", "uri", "user", "pass");
Connection c2 = ConexionDB.getDefaultConnection();

3 comentarios:

fernant dijo...

hola, antes que nada gracias por la ayuda prestada, me estoy iniciando en esto de java y estoy tratando de hacer una aplicacion de escitorio con una bbdd sqlite.

trate de implementar tu codigo pero me arroja un error en:

if(conexiones.hasKey(uri))

netbeans me dice :
cannot find symbol
symbol: method hasKey(java.lang.String)
location: interface java.util.Map

imcompatible types
found: java.util.Map.hasKey
required: boolean

Busque en la api de java y aparentemente el metodo hasKey no existe para la clase HashMap ni para la clase LinkedHashMap (si no estoy equivocado).

yanmaneee dijo...

coach outlet
hogan outlet
hermes bag
hogan outlet online
adidas flux
jordan shoes
hermes handbags
golden goose sneakers
adidas gazelle sale
yeezy boost 350 v2

lenoseen dijo...

why not try here his comment is here YOURURL.com site link check this site out blog here