SISTEMA DE COMPRAS CONEXIÓN A BASE DE DATOS
ANALISIS DE SISTEMAS
Base de Datos con JAVA
TEMAS
• Introducción.
• Drivers.
• Cursores y Bloqueo.
• Excepciones.
• Prepared Statemnet.
• Transacciones.
• Strore Procedures.
MODELO BD
JDBC – JAVA DATA BASE CONECTION
• API de JAVA que permite la ejecución de instrucciones
SQL.
• Para que una aplicación pueda hacer operaciones en una
BD, debe hacerlo a través de 2 interfaces:
• JDBC API para aplicaciones: paquete de JAVA (java.sql) que
contiene un conjunto de clases y interfaces escritas en JAVA
• JDBC Driver para manejadores o drivers: permite la conexión
entre la aplicación y al BD.
• Los drivers son programas de bajo nivel que se encargan
de mantener la comunicación entre la API de aplicaciones
y el RDBMS.
Cargar Drivers
Conectarse,
Definir Tx
Obtener
Conexión
Objeto
Statement
Voy a realizar
un DML,DDL
Objeto
ResultSet
Objeto
PreparedStatement
Objeto
CallableStatement
Voy a ejecutar
operación pre
compilada
Voy a trabajar
con Stored
Procedures
ejecuto
ejecuto
ejecuto
ejecuto
Liberar
Recursos
Conexión a un RDBMS
Conexión y Acceso a RDBMS
Objeto Connection
• El objeto Connection representa una conexión con la BD.
• La sesión incluye las sentencias SQL que se ejecuten así como los resultados que se obtengan. Una aplicación puede tener una o más conexiones con una BD o puede tener conexiones con diferentes BD.
• Para registrar un driver utilizamos: Class.forName(clase.del.driver);
• Podemos abrir una conexión :
• DriverManager.getConnection(url,usr,pwd);• url: dirección fisica del RDBMS mediante el driver
• usr: usuario de base de datos
• pwd: contraseña de base de datos
JDBC URL
Proporciona una forma de identificar una fuente de datos. Es
particular para cada tipo y fabricante de Driver. Pueden identificarse
a través de servicios como DNS, NIS, NIS+, etc
jdbc : <subprotocolo>:<subnombre>
jdbc : Protocolo. Es un valor fijo.
<subprotocolo> : El nombre del driver o el nombre de un
mecanismo de conexión que puede ser soportado por uno o
más drivers.
<subnombre> : El nombre que identifica a la fuente de datos.
Puede tener diferentes sintaxis de acuerdo al fabricante del
driver.
Conexión y Acceso a RDBMS
Conexión y Acceso a RDBMS
Conexión con ODBC
Class.forName("jdbc.odbc.JdbcOdbcDriver"); //Carga el driver
String url = "jdbc:odbc:basedeDatos";
Connection con = DriverManager.getConnection(url, "userID", "passwd");
Class.forName(”oracle.jdbc.driver.OracleDriver"); //Carga el driver
Connection con = DriverManager.getConnection
("jdbc:oracle:thin:@<database>" , " userID ", " passwd ");
Conexión con Oracle
Class.forName(” com.mysql.jdbc.Driver"); //Carga el driver
Connection con = DriverManager.getConnection
("jdbc:mysql://127.0.0.1/<database>" , " userID ", " passwd ");
Conexión con MySQL
Objeto Statement
El objeto statement se utiliza para enviar instrucciones SQL a
la BD.
• Existen tres tipos de Statement :
• Statement : Instrucciones SQL
• PreparedStatement : Instrucciones SQL PreCompiladas
• CallableStatement : StoreProcedures
• Connection con = DriverManager.getConnection(url,usr,pwd);
• Statement stmt = con.createStatement();
• Una vez terminada su utilización el objeto statement es recogido por el
recolector de basura, pero podemos cerrarlo con el metodo
stmt.close();
Ejecución de Sentencias SQL
La sentencias SQL se ejecutan normalmente con :
• executeUpdate() : INSERT, UPDATE, DELETE, CREATE
TABLE, DROP TABLE. Retorna el número de filas que
han sido alteradas.
• executeQuery() : Para utilizarlo con sentencias SELECT
Ejem.
stmt.executeQuery("SELECT a, b, c FROM Table2");
stmt.executeUpdate(“INSERT INTO Detalles VALUES(10,10,´A´);
Ejecución de Sentencias SQL
También podemos ejecutar sentencias en batch con el
método :
• executeBatch() : Podemos enviar múltiples sentencias
SQL y tratarlas como una unidad.
• Statement stmt = con.createStatement();
• con.setAutoCommit(false);
• stmt.addBatch("INSERT INTO employees VALUES (1000, 'Joe Jones')");
• stmt.addBatch("INSERT INTO departments VALUES (260, 'Shoe')");
• stmt.addBatch("INSERT INTO emp_dept VALUES (1000, '260')");
• int [ ] updateCounts = stmt.executeBatch();
Objeto ResultSet
• El resultSet contiene los resultados de la ejecución de un
query SQL en un cursor que apunta a la fila actual de datos. El
desplazamiento se da cada vez que se llama al metodo next().
• Por default el desplazamiento es hacia delante solamente.
JDBC 2.0 permite diversos desplazamientos : previous, first,
last, absolute, relative, afterLast, and beforeFirst.
• Ejem.
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");
while (rs.next()) {
...// realizamos diversas operaciones con el cursor
}
Objeto ResultSet
• Número de filas en un ResultSet :
String sql = "select last_name, first_name from employees“;
ResultSet rs = stmt.executeQuery(sql);
rs.last();
int numberOfRows = rs.getRow();
System.out.println("XYZ, Inc. has " + numberOfRows +
"employees");
rs.beforeFirst();
while (rs.next()) {
. . . // operaciones con el cursor
}
Objeto ResultSet
Obteniendo Datos de un ResultSet :
• Utilizamos los métodos getXXX() : Donde XXX indica el
tipo de dato que queremos obtener a partir del Cursor.
String s = rs.getString(2);
String s = rs.getString(“title");
• El parámetro dentro del getXXX() si es un numero hará
referencia al campo que ocupa esa posición en el
registro actual, cuando se trata de una cadena esta
referirá al nombre del campo obtenido en la consulta.
Obteniendo Datos de un ResultSet :
Obteniendo Datos de un ResultSet :
Resumen
• JDBC es un API que nos permite conectarnos a cualquier RDBMS.
• Nos valemos de drivers para lograr una comunicación.
• Es potestad de cada fabricante cumplir con las especificaciones de la API.
• Para un aplicación debemos de “cargar” la clase del driver, en primer lugar.
• Generamos el objeto Connection.
• Si ejecutamos SELECT : Objeto Statement y Objeto ResultSet
• Si ejecutamos INSERT, UPDATE, etc. : Objeto Statement
• Si ejecutamos sentencias precompiladas : Objeto PreparedStatement.
• Si trabajamos con Stored Procedures : Objeto CallableStatement.
• Podemos controlar el nivel de Transacción. ( de acuerdo al driver)
Recordando
form Servlet Clase
Vista.jsp Control.java Modelo.java
BASE DE
DATOS
Envía datos Llama método
Se c
on
ecta
aV
ista Utiliza JSP
y HTML
Formularios
Con
trola
dor Java
Servlet
Toma decisiones
Modelo Clases en
JAVA
Atributos y métodos
Modelo de 3 capas - MVC