| Altas, bajas y modificaciones |
| Paso 3: Operativa |
Creación de un Objeto de tipo Connection y de un Objeto de tipo Statement
Este es el Constructor correspondiente a la Clase SqlUtil
SqlUtil(){
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String urlJdbc = "jdbc:odbc:ALTABAJAMOD";
connection = DriverManager.getConnection(urlJdbc);
System.out.println("connection: " + connection);
}
catch (ClassNotFoundException cnfe) {
cnfe.printStackTrace();
}
catch (SQLException sqle){
sqle.printStackTrace();
}
try {
statement = connection.createStatement();
}
catch (SQLException e) {
e.printStackTrace();
}
} |
- Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
- para obtener conceptos sobre introspección y entender el mecanismo interno del método forName(...) tenemos que seguir el siguiente vínculo Examinar objetos con una venda en los ojos
- en este caso concreto la MVJ está cargando el driver JDBC-ODBC Bridge de tipo 1
- no es necesario crear una instancia del driver y registrarlo con DriverManager, ya que la llamada al método forName(...) lo hace automáticamente la MVJ
- la Clase DriverManager es la responsable de cargar y descargar estos drivers. En nuestro ejemplo se carga la Clase sun.jdbc.odbc.JdbcOdbcDriver en memoria en tiempo de ejecución
- cuando una aplicación está en producción lo habitual es que el argumento del método forName(...) esté parametrizado
- un ejemplo práctico de esto sería el caso de una empresa que en su día realizó una aplicación con la versión de Oracle 9i y al cabo de un tiempo se actualiza a la versión 10g
- si el argumento en cuestión no está parametrizado, entonces personal del departamento de desarrollo tendría que modificar el código fuente compilarlo y actualizar la aplicación a una nueva versión o release
- si por el contrario este argumento está parametrizado el único personal que tiene que intervenir en el cambio de versión es el de administración y explotación del Sistema que está en producción, simplemente cambiando desde el exterior de la aplicación el nombre del nuevo driver que sustituye al anterior
- String urlJdbc = "jdbc:odbc:ALTABAJAMOD";
connection = DriverManager.getConnection(urlJdbc);
- conectamos a la BDS con un Objeto de tipo Connection
- la URL de JDBC
- es un mecanismo utilizado para identificar un driver de Base de Datos
- representa un driver y la información adicional específica del driver para localizar una Base de Datos y conectarla a él.
- tiene la siguiente sintaxis:
jdbc:<subprotocolo>:<subnombre> |
- jdbc
- indica el protocolo con el cual se está trabajando.
- éste es el único protocolo permitido en JDBC
- <subprotocolo>
- identifica un driver de Base de Datos elegido por los proveedores del driver de la Base de Datos
- <subnombre>
- la sintaxis del subnombre es específica del driver. Es decir un driver puede elegir cualquier sintaxis apropiada para su implementación
- con el método getConnection(...) conseguimos una conexión con la Base de Datos para posteriormente poder interactuar con ella
- se crea una autopista entre la aplicación Java y la Base de Datos
- statement = connection.createStatement();
- creamos un objeto de tipo Statement
- en este punto la referencia a un Objeto de tipo Statement se crea , pero no tiene todavía una sentencia SQL para pasarsela a la DBMS
- se crea el coche que viajará a través de la Autopista desde la aplicación Java hasta la Base de Datos
Ahora vamos a ejecutar la aplicación teniendo en cuenta el siguiente Diagrama de Secuencia

- Usuario
- en UML Usuario es un Actor que interactúa con nuestra aplicación
- en este caso envía el mensaje main(...) a la Clase SqlApli
- el mensaje main(...) a su vez crea una instancia del tipo SqlApli para pasar de la zona de memoria estática a la zona de memoria monticulo o heap
- el Constructor del objeto de tipo SqlApli crea una instancia de tipo SqlUtil
- el Constructor del objeto SqlUtil
- primero envía el mensaje estático forName(...)
- segundo envía el mensaje estático getConnection(...) para obtener una autopista hacia la BDS
- y tercero envía el mensaje createStament() para obtener el coche que viajará a través de la autopista
Esta es la salida de la ejecución
- esta salida nos muestra el resultado de la ejecución de la sentencia System.out.println("connection: " + connection);
- aquí podemos ver claramente como los fabricantes de Bases de Datos implementan las Interfaces de las APIs JDBC
- en este caso concreto podemos advertir que un objeto de tipo sun.jdbc.odbc.JdbcOdbcConnection perteneciente al driver JDBC-ODBC Bridge implementa la Interfaz java.sql.Connection
- por tanto la Interfaz java.sql.Connection está jugando el papel de factoría abstracta mientras que el Objeto de tipo sun.jdbc.odbc.JdbcOdbcConnection está desempeñando el papel de factoría concreta
- el número @1034bb5 nos indica la dirección de memoria donde se encuentra ubicado el Objeto de tipo sun.jdbc.odbc.JdbcOdbcConnection