conexion a un bd singleton
    hola Prof. le escribo para hacerle una consultica
sobre una conexión bd sincronizada con el patrón de
diseño Singleton. La verdad de la forma que diseñe no
se si es la forma correcta y como hago para sacar los
datos del resulset en una subclase?
		    Hola!!!!!!!!
El patron Singleton si no estoy loco es usado en un constructor privado => lo q queres hacer es q la clase que "maneje" la BD tenga un constructor privado????
Si es asi, ahi va un ejemplo:
public class BaseDeDatos
{
/** Driver de la base de datos */
private static java.sql.Driver driver = null;
/** Conexion a la base de datos */
private static java.sql.Connection connection = null;
/** Instancia de la clase cDataBase */
private static BaseDeDatos instancia = null;
/** Constructor privado. Llama al metodo connect()*/
private BaseDeDatos()
{
this.connect();
}
/** Metodo static q llama al constructor privado
* @returns Instancia unica de la clase */
public static BaseDeDatos getInstancia()
{
if (instancia == null)
instancia = new BaseDeDatos();
return instancia;
}
/** Getea la conexion
* @returns Conexion a la base de datos*/
public java.sql.Connection getConnection()
{
return this.connection;
}
/** Metodo que se conecta a la base de datos de la aplicacion */
private void connect()
{
String databaseURL = "jdbc:interbase://localhost/C:/Resin/resin-2.1.9/doc/BaseGDB/base.gdb";
String user = "SYSDBA";
String password = "masterkey";
String driverName = "interbase.interclient.Driver";
try
{
// Carga del driver en memoria.
try
{
Class.forName(driverName);
}
catch (java.lang.ClassNotFoundException e)
{
System.out.println ("InterClient no se encuentra definido en el class path.");
System.out.println (e.getMessage ());
return;
}
// A esta altura el driver deberÃa estar registrado con el driver manager.
try
{
driver = java.sql.DriverManager.getDriver (databaseURL);
System.out.println ("InterClient version " +
driver.getMajorVersion () +
"." +
driver.getMinorVersion () +
" registrada con el driver manager.");
}
catch (java.sql.SQLException e)
{
System.out.println ("No se ha podido encontrar InterClient entre los drivers registrados.");
return;
}
// Interclient esta ahora registrado con el driver manager
// Ahora se intentara conseguir una conexion con la base de datos
try
{
connection = java.sql.DriverManager.getConnection (databaseURL, user, password);
System.out.println ("Conexion establecida.");
}
catch (java.sql.SQLException e)
{
System.out.println ("Error al establecer la conexion.");
return;
}
// Deshabilitacion del autocommit
try
{
connection.setAutoCommit (false);
System.out.println ("Auto-commit deshabilitado.");
}
catch (java.sql.SQLException e)
{
System.out.println ("Error al deshabilitar el auto-commit.");
return;
}
}
finally
{
return;
}
}
/** Cierra la conexion a la base de datos*/
public void Close()
{
try
{
if (connection != null)
connection.close();
}
catch(java.sql.SQLException e)
{
System.out.println("No se pudo cerrar la conexion a la base de datos");
}
}
}
Espero q haya sido eso
Salu2!!!!!
P.D.: Conexion con INTERBASE desde JAVA usando Interclient ya q INTERBASE no soporta JDBC asi por q si y es por eso q existe INTERCLIENT. Ahora existe FIREBIRD q es open source y esta en sourceforge y anda mas rapido q INTERBASE
Salu2 otra vez!!!!!!!!
    El patron Singleton si no estoy loco es usado en un constructor privado => lo q queres hacer es q la clase que "maneje" la BD tenga un constructor privado????
Si es asi, ahi va un ejemplo:
public class BaseDeDatos
{
/** Driver de la base de datos */
private static java.sql.Driver driver = null;
/** Conexion a la base de datos */
private static java.sql.Connection connection = null;
/** Instancia de la clase cDataBase */
private static BaseDeDatos instancia = null;
/** Constructor privado. Llama al metodo connect()*/
private BaseDeDatos()
{
this.connect();
}
/** Metodo static q llama al constructor privado
* @returns Instancia unica de la clase */
public static BaseDeDatos getInstancia()
{
if (instancia == null)
instancia = new BaseDeDatos();
return instancia;
}
/** Getea la conexion
* @returns Conexion a la base de datos*/
public java.sql.Connection getConnection()
{
return this.connection;
}
/** Metodo que se conecta a la base de datos de la aplicacion */
private void connect()
{
String databaseURL = "jdbc:interbase://localhost/C:/Resin/resin-2.1.9/doc/BaseGDB/base.gdb";
String user = "SYSDBA";
String password = "masterkey";
String driverName = "interbase.interclient.Driver";
try
{
// Carga del driver en memoria.
try
{
Class.forName(driverName);
}
catch (java.lang.ClassNotFoundException e)
{
System.out.println ("InterClient no se encuentra definido en el class path.");
System.out.println (e.getMessage ());
return;
}
// A esta altura el driver deberÃa estar registrado con el driver manager.
try
{
driver = java.sql.DriverManager.getDriver (databaseURL);
System.out.println ("InterClient version " +
driver.getMajorVersion () +
"." +
driver.getMinorVersion () +
" registrada con el driver manager.");
}
catch (java.sql.SQLException e)
{
System.out.println ("No se ha podido encontrar InterClient entre los drivers registrados.");
return;
}
// Interclient esta ahora registrado con el driver manager
// Ahora se intentara conseguir una conexion con la base de datos
try
{
connection = java.sql.DriverManager.getConnection (databaseURL, user, password);
System.out.println ("Conexion establecida.");
}
catch (java.sql.SQLException e)
{
System.out.println ("Error al establecer la conexion.");
return;
}
// Deshabilitacion del autocommit
try
{
connection.setAutoCommit (false);
System.out.println ("Auto-commit deshabilitado.");
}
catch (java.sql.SQLException e)
{
System.out.println ("Error al deshabilitar el auto-commit.");
return;
}
}
finally
{
return;
}
}
/** Cierra la conexion a la base de datos*/
public void Close()
{
try
{
if (connection != null)
connection.close();
}
catch(java.sql.SQLException e)
{
System.out.println("No se pudo cerrar la conexion a la base de datos");
}
}
}
Espero q haya sido eso
Salu2!!!!!
P.D.: Conexion con INTERBASE desde JAVA usando Interclient ya q INTERBASE no soporta JDBC asi por q si y es por eso q existe INTERCLIENT. Ahora existe FIREBIRD q es open source y esta en sourceforge y anda mas rapido q INTERBASE
Salu2 otra vez!!!!!!!!
