connection en java
TRANSCRIPT
Modelos de acceso a BD
2
AplicaciónJavaJDBC
DBMS
Cliente
Servidor BD
ProtocoloBD
Modelos de acceso a BD
3
AplicaciónJava
JDBC
DBMS
Navegador Web
Cliente (GUI)
Protocolo HTTP
ServidorBD
Servlets, JSPen servidor WEB
Protocolo BD
Cargando el Driver Es necesario primero cargar una clase con el driver de
la base de datos (esto lo provee el vendedor de la DBMS)
Ejemplo:Class c = Class.forName(“com.informix.jdbc.IfxDriver"); Calss.forName(“com.novell.sql.LDAPDriver”); Class.forName("com.mysql.jdbc.Driver");
Esto es particular según la base de datos que se usa Luego hay que crear una instancia de la clase
c.newInstance();
4
Estableciendo la Conexión
Un objeto “Connection” representa una conexión a una base de datos.
La clase “DriverManager” intenta ubicar el controlador que pueda conectarse a la base de datos representada en la URL.
5
Connection con = DriverManager.getConnection (url,login, password);
Connection
6
...Connection
7
Ejemplo de Connection import java.sql.*;import com.mysql.jdbc.*;java.sql.Connection getConnection(String usr, String pass) {
url = "jdbc:mysql://localhost/test"; driver = "com.mysql.jdbc.Driver"; try { Class.forName(driver).newInstance(); con = DriverDriverManager.getConnection(url, usr,pass); return con; } catch(Exception e2) { System.err.println("Problems"); return null; }}
8
La clase Statement y Connection Connection con = getConnection(…);
Statement stmt=
con.createStatement(); En este momento la statement existe
pero no tiene una sentencia SQL para ejecutar. Esta se puede pasar con los métodos executeUpdate(String), usada para crear/modificar tablas (no
hay resultados), típicamente para create, update, delete...
executeQuery(String) para hacer consultas, retornan resultados en un objeto de la clase ResultSet, típicamente para select
9
Statement s=con.createStatement();s.executeUpdate(“...”); Crear tabla s.executeUpdate(“create libros(”+“ id char(20),” +“ titulo char(50),” +“ autor char(50,)” +“ editorial char(20),” +“ fecha char(8),” +“ primary key(id))”);
Crear y ejecutar comando
El ResultSet
ResultSet rs = stmt.executeQuery(“select nombre where direccion like Santiago”);
while (rs.next()) {
String s = rs.getString(“nombre”);
int y = rs.getInt(“año”);
System.out.println(s+” “+y);
} ResultSet rs contiene una colección de filas con
los resultados de la pregunta. La instrucción next avanza un puntero que indica en qué fila estamos actualmente. Al principio está antes de la primera fila, por lo cual se hace necesario ejecutar un next() para situarse en la primera11
ResultSet r=s.executeQuery( “select * from libros where titulo like ‘%Java%’”); String mayor=””; while(r.next()){ String fecha=r.getString(“fecha”); if(fecha.compareTo(mayor)>0) mayor=fecha; } //posicionar antes de primera fila r.beforeFirst(); //r.absolute(0); //recorrer libros de Java while(r.next()) if( r.getString(“fecha”).equals(mayor) ) System.out.println( r.getString(“id”)+r.getString(“titulo”));
Conclusiones
Prepared Statements
13
Prepared Statements: EjemploPreparedStatement updateSales;String updateString = "update COFFEES “+
"set SALES = ? where COF_NAME like ?";
updateSales = con.prepareStatement(updateString);int [] salesForWeek = {175, 150, 60, 155, 90};String [] coffees = {"Colombian", "French_Roast",
"Espresso", "Colombian_Decaf", "French_Roast_Decaf"};
int len = coffees.length;for(int i = 0; i < len; i++) { updateSales.setInt(1,salesForWeek[i]); updateSales.setString(2, coffees[i]); updateSales.executeUpdate();}
14
Transacciones
15
Transacciones
16
Stored Procedures
17
Un ejemploPara crear el Stored Procedure String crearSP = “create prodcedure SHOW_SUPPLIERS”+
“ as ”+
“select SUPPLIERS.SUP_NAME, COFFEES.COF_NAME”+
“from SUPPLIERS, COFFEES ”+
“where SUPPLIERS.SUP_ID = COFFEES.SUP_ID”
Statement stmt = con.CreateStatement();
stmt.executeQuery(createSP);
Para llamar el Stored ProcedureCallableStatement cs;
cs = con.prepareCall(“{call SHOW_SUPPLIERS}”);
ResultSet rs = cs.executeQuery();
18