Conectividad BD A JDBC

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 28

Conectividad con Bases de Datos desde Java (JDBC).

Antonio S. Cofio Marta Zorrilla Universidad de Cantabria

Java

Aplicaciones de bases de datos


CLIENTE SERVIDOR
Gestin de datos Middleware Protocolo de comunicaciones Hardware

Modelo dos capas

Aplicacin Middleware Protocolo de comunicaciones Hardware

Modelo n-capas
CLIENTE

SERVIDOR DE TRANSACCIONES /APLICACIONES

SERVIDOR DE DATOS

Presentacin Middleware Protocolo de comunicaciones Hardware

Procesamiento Middleware Protocolo de comunicaciones Hardware

Gestin de datos Middleware Protocolo de comunicaciones Hardware

Middleware: Todo software distribuido necesario para la interaccin entre clientes y servidores. Puede ser propietario del gestor de bases de datos que se utilice o estndar.
Conectividad bases de datos con JAVA. JDBC (Antonio S. Cofio, Marta Zorrilla. Univ. Cantabria)

Feb, 2009, Pg.2

Conectividad con Bases de Datos


ODBC (Open DataBase Connectivity): interfaz para comunicarse con SGBDR JAVA implementa JDBC debido a que ODBC es una API en C. Los Controladores ODBC deben ser instalados en las mquinas clientes, esto lleva conflictos con la seguridad implementada en JAVA (sobre todo en los Applets). Existen distintos tipos de Controladores JDBC que nos permiten una conectividad con los servidores de Bases de Datos: Tipo 1: puente JDBC-ODBC Tipo 2: traducen directamente el API JDBC en un API especfico de la base de datos. Tipo 3: traducen el API JDBC en un protocolo independiente de la base de datos. El driver JDBC no comunica directamente con la base de datos; comunica con un servidor de capa media, que a su vez comunica con la base de datos. Es el que nos permite de hacer uso del protocolo HTTP, y de esta forma poder integrar soporte para Bases de Datos con aplicaciones WEB. Tipo 4: Los drivers se comunican directamente con la base de datos. Mejor rendimiento pero menos flexible (sobretodo si necesitamos cambiar de BD)
Conectividad bases de datos con JAVA. JDBC (Antonio S. Cofio, Marta Zorrilla. Univ. Cantabria)

Feb, 2009, Pg.3

Uso del puente JDBC-ODBC (Tipo 1)


Usar una base de Datos de MS Access mediante el origen de datos ODBC de Windows. En esta base de datos crearemos una tabla que luego manipularemos. Necesitamos configurar nuestro Archivo .mdb como origen de Datos. Seleccionamos el controlador para nuestro origen de datos. Microsoft Access Driver (*.mdb)

Conectividad bases de datos con JAVA. JDBC (Antonio S. Cofio, Marta Zorrilla. Univ. Cantabria)

Feb, 2009, Pg.4

Uso del puente JDBC-ODBC (Tipo 1)cont.

Damos un nombre a nuesto origen de datos (Meteo) Seleccionamos el fichero *.mdb (la Base de Datos). Ya tenemos definido un origen de datos ODBC.

Nuestro objetivo es acceder a la base de datos Meteo mediante una aplicacin JAVA usando JDBC.

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance(); String url = "jdbc:odbc:Meteo"; Connection c = DriverManager.getConnection(url);


Conectividad bases de datos con JAVA. JDBC (Antonio S. Cofio, Marta Zorrilla. Univ. Cantabria)

Feb, 2009, Pg.5

La Clase "DriverManager"
Method Summary
static void static Connecti on static Connecti on static Connecti on static Driver static Enumera tion static int static PrintWrit er static void static void static void static void deregisterDriver(Driver driver) deregisterDriver Drops a Driver from the DriverManager's list.

getConnection(String url) getConnection


Attempts to establish a connection to the given database URL. getConnection(String url, Properties info) getConnection Attempts to establish a connection to the given database URL. getConnection(String url, String user, String password) getConnection Attempts to establish a connection to the given database URL. getDriver(String url) getDriver Attempts to locate a driver that understands the given URL. getDrivers() getDrivers Retrieves an Enumeration with all of the currently loaded JDBC drivers to which the current caller has access. getLoginTimeout() getLoginTimeout Gets the maximum time that a driver can wait when attempting to log in to a database. getLogWriter() getLogWriter Gets the log writer. println(String message) println Prints a message to the current JDBC log stream. registerDriver(Driver driver) registerDriver Registers the given driver with the DriverManager. setLoginTimeout(int seconds) setLoginTimeout Sets the maximum time in seconds that a driver will wait while attempting to connect to a DB. setLogWriter(PrintWriter out) setLogWriter Sets the logging/tracing PrintWriter object that is used by the DriverManager and all drivers.

Conectividad bases de datos con JAVA. JDBC (Antonio S. Cofio, Marta Zorrilla. Univ. Cantabria)

Feb, 2009, Pg.6

La Interface "Connection"
Method Summary
void close() close Releases a Connection's database and JDBC resources immediately instead of waiting for them to be automatically released. void commit() commit Makes all changes made since the previous commit/rollback permanent and releases any database locks currently held by the Connection. Statement DatabaseMeta Data int Map CallableState ment PreparedState ment void

createStatement() createStatement

Creates a Statement object for sending SQL statements to the database. getMetaData() getMetaData Gets the metadata regarding this connection's database. getTransactionIsolation() getTransactionIsolation Gets this Connection's current transaction isolation level. getTypeMap() getTypeMap Gets the type map object associated with this connection.

prepareCall(String sql) prepareCall

prepareStatement(String sql) prepareStatement


rollback() rollback

Creates a CallableStatement object for calling database stored procedures.

Creates a PreparedStatement object for sending parameterized SQL statements to the database.

Drops all changes made since the previous commit/rollback and releases any database locks currently held by this Connection. void void void setAutoCommit(boolean autoCommit) setAutoCommit Sets this connection's auto-commit mode. setReadOnly(boolean readOnly) setReadOnly Puts this connection in read-only mode as a hint to enable database optimizations. setTypeMap(Map map) setTypeMap Installs the given type map as the type map for this connection.

Conectividad bases de datos con JAVA. JDBC (Antonio S. Cofio, Marta Zorrilla. Univ. Cantabria)

Feb, 2009, Pg.7

La Interfase "Statement"
Para acceder a la base de datos necesitamos poder ejecutar sentencias SQL. Para ello podemos llamar al mtodo createStatement() de Connection para obtener un objeto que implementa la interfase Statement.
Method Summary
boolean ResultSet int execute(String sql) execute Executes an SQL statement, that may return multiple results. executeQuery(String executeQuery sql) Executes an SQL statement that returns a single ResultSet object. executeUpdate(String sql) executeUpdate Executes an SQL INSERT, UPDATE or DELETE statement or an SQL statement that returns nothing, such as an SQL DDL statement.

Statement stmt=con.createStatement(); stmt.execute("CREATE TABLE cafes (nombre char(20), precio NUMERIC);"); stmt.executeUpdate("INSERT INTO cafes VALUES (Colombiano,9);"); stmt.executeQuery("SELECT * FROM cafes WHERE precio<10;");

Conectividad bases de datos con JAVA. JDBC (Antonio S. Cofio, Marta Zorrilla. Univ. Cantabria)

Feb, 2009, Pg.8

Primer Ejemplo. Creando una Tabla Nueva


import java.sql.*; public class CrearTabla{ public static void main(String args[]) throws Exception { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance(); String url = "jdbc:odbc:Meteo"; Connection c= DriverManager.getConnection(url); Statement stmt=c.createStatement(); stmt.executeUpdate("CREATE TABLE mediciones ("+ est_id INTEGER NOT NULL,"+ med_fecha DATE NOT NULL,"+ "var_id VARCHAR(8) NOT NULL,"+ med_valor FLOAT,"+ "unidmed_id VARCHAR(8),"+ "PRIMARY KEY (est_id,med_fecha,var_id));"); stmt.close(); c.close(); } }

Cargamos el Driver JDBC-ODBC. Definimos el Origen de Datos, y realizamos la conexin. Creamos y Ejecutamos estamentos SQL para crear la Tabla predicciones y Aadir elementos a esta. Adems realizamos una solicitud para obtener todos los elementos de la tabla.

Si no controlamos las excepciones, cuando tratemos de ejecutar por segunda vez el programa nos dar error, pues la tabla ya existir en la base de datos Meteo.
Conectividad bases de datos con JAVA. JDBC (Antonio S. Cofio, Marta Zorrilla. Univ. Cantabria)

Feb, 2009, Pg.9

Excepciones SQL. (SQLException)


public class SQLException extends Exception An exception that provides information on a database access error or other errors. Each SQLException provides several kinds of information: A string describing the error. This is used as the Java Exception message, available via the method getMesage. A "SQLstate" string, which follows the XOPEN SQLstate conventions. The values of the SQLState string are described in the XOPEN SQL spec. An integer error code that is specific to each vendor. Normally this will be the actual error code returned by the underlying database. A chain to a next Exception. This can be used to provide additional error information.
int SQLException String void getErrorCode() getErrorCode Retrieves the vendor-specific exception code for this SQLException object. getNextException() getNextException Retrieves the exception chained to this SQLException object. getSQLState() getSQLState Retrieves the SQLState for this SQLException object. setNextException(SQLException ex) setNextException Adds an SQLException object to the end of the chain.

Conectividad bases de datos con JAVA. JDBC (Antonio S. Cofio, Marta Zorrilla. Univ. Cantabria)

Feb, 2009, Pg.10

Controlando una Excepcin SQL ...


import java.sql.*; public class CrearTabla{ public static void main(String args[]) { try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance(); String url = "jdbc:odbc:Meteo"; Connection c= DriverManager.getConnection(url); Statement stmt=c.createStatement(); stmt.executeUpdate("CREATE TABLE mediciones ("+ est_id INTEGER NOT NULL,"+ med_fecha DATE NOT NULL,"+ "var_id VARCHAR(8) NOT NULL,"+ med_valor FLOAT,"+ "unidmed_id VARCHAR(8),"+ "PRIMARY KEY (est_id,med_fecha,var_id));"); stmt.close(); c.close(); }catch(SQLException e){ System.out.println("Codigo de error SQL: "+e.getErrorCode()); e.printStackTrace(); }catch(Exception e){ e.printStackTrace(); } }

El cdigo de error especfico depende del gestor de base de datos. Para "Access" la existencia de una tabla es -1303
Conectividad bases de datos con JAVA. JDBC (Antonio S. Cofio, Marta Zorrilla. Univ. Cantabria)

Feb, 2009, Pg.11

Controlando una Excepcin SQL


Podemos modificar el cdigo para que intente crear una tabla y, en caso de que exista, borre la existente y defina la nueva tabla.
import java.sql.*; public class CrearTabla_Exception2{ public static void main(String args[]) { String creaTabla="CREATE TABLE mediciones ("+ est_id INTEGER NOT NULL,"+ med_fecha DATE NOT NULL,"+ "var_id VARCHAR(8) NOT NULL,"+ med_valor FLOAT,"+ "unidmed_id VARCHAR(8),"+ "PRIMARY KEY (est_id,med_fecha,var_id));"; Connection c; Statement stmt; try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance(); String url = "jdbc:odbc:Meteo"; c= DriverManager.getConnection(url); stmt=c.createStatement(); try{ stmt.executeUpdate(creaTabla); System.out.println("Creada tabla\n"); }catch(SQLException e){ if (e.getErrorCode()==-1303){ System.out.println("Borrada y creada tabla\n"); stmt.executeUpdate("DROP TABLE mediciones"); stmt.executeUpdate(creaTabla); } } }catch(Exception e){ e.printStackTrace(); }}} Conectividad bases de datos con JAVA. JDBC (Antonio S. Cofio, Marta Zorrilla. Univ. Cantabria)

Feb, 2009, Pg.12

Sentencias SQL Preparadas


public interface PreparedStatement extends Statement Cundo se utilizar? Cuando se quiera ejecutar varias veces la misma sentencia, ya que al estar precompilada, la ejecucin es ms rpida. Cmo pasar los parmetros? usando los mtodos setXXX definidos en la clase PreparedStatement. Si el valor que queremos sustituir por una marca de interrogacin es un int de Java, podemos llamar al mtodo setInt. Si el valor que queremos sustituir es un String de Java, podemos llamar al mtodo setString, etc. En general, hay un mtodo setXXX para cada tipo Java.
PreparedStatement UPDATE PreparedStatement pstmt pstmt = = con.prepareStatement(" con.prepareStatement(" UPDATE EMPLOYEES EMPLOYEES SET SALARY = ? WHERE ID = ?"); SET SALARY = ? WHERE ID = ?"); pstmt.setBigDecimal(1, pstmt.setBigDecimal(1, 153833.00); 153833.00); pstmt.setInt(2, pstmt.setInt(2, 110592); 110592); pstmt.executeUpdate(); pstmt.executeUpdate();

Conectividad bases de datos con JAVA. JDBC (Antonio S. Cofio, Marta Zorrilla. Univ. Cantabria)

Feb, 2009, Pg.13

Ejemplo. Rellenando Mediciones


import java.io.*;import java.sql.*;import java.util.*; public class RellenaMedidas{ public static void main(String args[]){ double data; String str,s; Connection c; PreparedStatement pstmt_med; try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance(); }catch(Exception e){ e.printStackTrace(); } String url = "jdbc:odbc:Meteo"; try{ c= DriverManager.getConnection(url); pstmt_med = c.prepareStatement("INSERT INTO mediciones"+ "(est_id,med_fecha,var_id,med_valor,unidmed_id) VALUES (?,?,?,?,?);"); BufferedReader br=new BufferedReader(new FileReader("medidas.dat")); str=br.readLine(); while(str!=null ){ pstmt_med.clearParameters(); StringTokenizer st=new StringTokenizer(str,","); s=st.nextToken(); pstmt_med.setInt(1,Integer.parseInt(s.trim())); s=st.nextToken(); s=s.substring(0,4)+"-"+s.substring(4,6)+"-"+s.substring(6,8); pstmt_med.setDate(2,java.sql.Date.valueOf(s)); pstmt_med.setString(3,"TEMP_MIN"); pstmt_med.setString(5," C"); s=st.nextToken(); data=Double.parseDouble(s.trim()); pstmt_med.setDouble(4,data); if(data!=-9999) pstmt_med.executeUpdate(); str=br.readLine(); } pstmt_med.close(); c.close() }catch(IOException e){ e.printStackTrace(); }catch(SQLException e){ e.printStackTrace(); } }} Conectividad bases de datos con JAVA. JDBC (Antonio S. Cofio, Marta Zorrilla. Univ. Cantabria)

Cargamos el Driver JDBC-ODBC. Nos conectamos a nuestro origen de datos. Creamos y Ejecutamos sentencias SQL preparadas para rellener la tabla de medidas. Abrimos el fichero de texto medidas.dat, del cul leeremos la informacin, usando tokens Asignamos cada uno de los parmetros de entrada de la sentencia preparada
Feb, 2009, Pg.14

Resultado de una consulta


public interface ResultSet
ResultSetMetaData getMetaData() boolean

Conjunto de datos devuelto por un SELECT.

Retrieves the number, types and properties of this ResultSet object's columns.

next()
Moves the cursor down one row from its current position.

public interface ResultSetMetaData

Objeto que permite obtener info sobre tipo de dato y propiedades de las columnas de un ResultSet

int

getColumnCount()
Returns the number of columns in this ResultSet object.

String int String

getColumnName(int column) getColumnType(int column)


Get the designated column's name. Retrieves the designated column's SQL type. Retrieves the designated column's database-specific type name.

getColumnTypeName(int column)

Conectividad bases de datos con JAVA. JDBC (Antonio S. Cofio, Marta Zorrilla. Univ. Cantabria)

Feb, 2009, Pg.15

Ejemplo. Resultado de una consulta


import import java.sql.*; java.sql.*; public class public class ViewData{ ViewData{ public static public static void void main(String[] main(String[] args) args) { { try try { { Class. forName ("sun.jdbc.odbc.JdbcOdbcDriver").newInstance(); Class. forName ("sun.jdbc.odbc.JdbcOdbcDriver").newInstance(); String url = "jdbc:odbc:Meteo"; String url = "jdbc:odbc:Meteo"; Connection getConnection (url, Connection c c= = DriverManager. DriverManager. getConnection (url, "", "", ""); ""); Statement st = c.createStatement Statement st = c.createStatement (ResultSet. TYPE_SCROLL_SENSITIVE ,ResultSet. CONCUR_READ_ONLY ); (ResultSet. TYPE_SCROLL_SENSITIVE ,ResultSet. CONCUR_READ_ONLY ); ResultSet ResultSet rs rs = = st.executeQuery("SELECT st.executeQuery("SELECT est_id,est_nombre est_id,est_nombre FROM FROM estaciones WHERE pais_id='SPAIN';"); estaciones WHERE pais_id='SPAIN';"); ResultSetMetaData ResultSetMetaData md md = = rs.getMetaData(); rs.getMetaData(); while(rs.next()) { while(rs.next()) { System. out .print("\nEstacin: System. out .print("\nEstacin: | | "); "); for(int for(int i=1; i=1; i<= i<= md.getColumnCount(); md.getColumnCount(); i++) i++) System. out .print(rs.getString(i) + " | System.out.print(rs.getString(i) + " | "); "); } } } } catch(Exception catch(Exception e) e) { { e.printStackTrace(); e.printStackTrace();

} } }} }}

Conectividad bases de datos con JAVA. JDBC (Antonio S. Cofio, Marta Zorrilla. Univ. Cantabria)

Feb, 2009, Pg.16

La Interfase "Statement, parmetros para consultas


createStatement Statement createStatement() Creates a Statement object for sending SQL statements to the database. resultSetType, int resultSetConcurrency) createStatement Statement createStatement(int Creates a Statement object that will generate ResultSet objects with the
given type and concurrency.

resultSetType, int resultSetConcurrency, int resultSetHoldability) createStatement Statement createStatement(int Creates a Statement object that will generate ResultSet objects with the
given type, concurrency, and holdability.

Parmetros: resultSetType: ResultSet.TYPE_FORWARD_ONLY,ResultSet.TYPE_SCROLL_INSENSITIVE, or ResultSet.TYPE_SCROLL_SENSITIVE resultSetConcurrency : ResultSet.CONCUR_READ_ONLY or ResultSet.CONCUR_UPDATABLE resultSetHoldability : ResultSet.HOLD_CURSORS_OVER_COMMIT or ResultSet.CLOSE_CURSORS_AT_COMMIT

Conectividad bases de datos con JAVA. JDBC (Antonio S. Cofio, Marta Zorrilla. Univ. Cantabria)

Feb, 2009, Pg.17

Conversin de Tipos
Common SQL Types--Standard Retrieval Methods
SQL Type BIGINT BINARY BIT CHAR DATE DECIMAL DOUBLE FLOAT INTEGER LONGVARBINARY LONGVARCHAR NUMERIC OTHER REAL SMALLINT TIME TIMESTAMP TINYINT VARBINARY VARCHAR Java Method getLong() getBytes() getBoolean() getString() getDate() getBigDecimal() getDouble() getDouble() getInt() getBytes() getString() getBigDecimal() getObject() getFloat() getShort() getTime() getTimestamp() getByte() getBytes() getString()

SQL3 Types--Retrieval Methods


SQL Type ARRAY BLOB CLOB DISTINCT REF STRUCT JAVA_OBJECT Java Method getArray() getBlob() getClob() getType() getRef() (cast)getObject() (cast)getObject()

Conectividad bases de datos con JAVA. JDBC (Antonio S. Cofio, Marta Zorrilla. Univ. Cantabria)

Feb, 2009, Pg.18

JDBC y SQL Server 2005


Cargar el Driver de la base de datos (tipo 4) . Tiene su propio conjunto de clases (http://www.microsoft.com/spain/sql/technologies/jdbc/default.mspx del SQL 2005) Despus especificar driver para el SQL 2005

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance(); String url = "jdbc:sqlserver://localhost;databaseName=Cine; user=MyUserName; password=*****;"; Connection c = DriverManager.getConnection(url);

Si usas SQL 2005 fjate que acepte transacciones TCP/IP. Este es un error comn ya que el servidor lo trae deshabilitado por defecto. Adems se necesita que el modo de conexin sea mixto

Conectividad bases de datos con JAVA. JDBC (Antonio S. Cofio, Marta Zorrilla. Univ. Cantabria)

Feb, 2009, Pg.19

JDBC y Oracle
Cargar el Driver de la base de datos (http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html) Despus especificar driver para el Oracle
Class.forName("oracle.jdbc.driver.OracleDriver"); String serverName = "127.0.0.1"; String portNumber = "1521"; String sid = "mydatabase"; String url = "jdbc:oracle:thin:@" + serverName+ ":" +portNumber + ":" + sid; String username = "username"; String password = "password"; connection = DriverManager.getConnection(url, username, password);

Conectividad bases de datos con JAVA. JDBC (Antonio S. Cofio, Marta Zorrilla. Univ. Cantabria)

Feb, 2009, Pg.20

Ejecucin de procedimientos almacenados


public interface CallableStatement extends PreparedStatement Interfaz para ejecutar procedimientos almacenados

void

registerOutParameter (int parameterIndex, int sqlType) Registers the OUT parameter in ordinal position parameterIndex to the JDBC type sqlType. wasNull() Retrieves whether the last OUT parameter read had the value of SQL NULL. getInt (int parameterIndex) Retrieves the value of the designated JDBC INTEGER parameter as an int in the Java programming language. setInt (String parameterName, int x) Sets the designated parameter to the given Java int value.

boolean int

void

Conectividad bases de datos con JAVA. JDBC (Antonio S. Cofio, Marta Zorrilla. Univ. Cantabria)

Feb, 2009, Pg.21

Ejemplo. Ejecucin procedimiento con parmetros de entrada y devolucin de cjto de resultados


import java.sql.*; public class ViewDataProc{ public static void main(String[] args) { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance(); String url = "jdbc:odbc:Cine"; Connection c = DriverManager.getConnection(url, "", ""); int idPer=2; //Id de la persona try { CallableStatement stmt = c.prepareCall("{ call dbo.PersonaPremios (?) }"); stmt.setInt (1,idPer); ResultSet rs = stmt.executeQuery(); while (rs.next()) { String texto = rs.getString("texto"); System.out.println( " Salida: " + texto); } CREATE PROCEDURE [dbo].[PersonaPremios] rs.close(); @idPersona int AS stmt.close(); SELECT Premios.Nombre + ' por ' + } Peliculas.TituloOriginal as texto catch (SQLException e) FROM Nominaciones N INNER JOIN Peliculas P { e.printStackTrace(); } ON N.IdPelicula = P.IdPelicula INNER JOIN } catch (Exception e) Premios Pr ON N.IdPremio = Pr.IdPremio INNER { e.printStackTrace(); }S. Cofio, Marta JOIN Personas Pe ON N.IdPer =Feb, Pe.IdPer WHERE Conectividad bases de datos con JAVA. JDBC (Antonio Zorrilla. Univ. Cantabria) 2009, Pg.22 (N.TipoPN ='P') AND (N.IdPer = @idPersona) }}

Ejemplo. Ejecucin procedimiento con parmetros de entrada y salida


public public static static void void executeStoredProcedure(Connection executeStoredProcedure(Connection con) con) { { try { try { CallableStatement CallableStatement cstmt cstmt = = con.prepareCall("{call con.prepareCall("{call dbo.GetImmediateManager(?, ?)}"); dbo.GetImmediateManager(?, ?)}"); cstmt.setInt(1, cstmt.setInt(1, 5); 5); cstmt.registerOutParameter(2, cstmt.registerOutParameter(2, java.sql.Types.INTEGER); java.sql.Types.INTEGER); cstmt.execute(); cstmt.execute(); System.out.println("MANAGER System.out.println("MANAGER ID: ID: " "+ + cstmt.getInt(2)); cstmt.getInt(2)); } } catch catch (Exception (Exception e) e) { { e.printStackTrace(); e.printStackTrace(); } } } } CREATE CREATE PROCEDURE PROCEDURE GetImmediateManager GetImmediateManager @employeeID @employeeID INT, INT, @managerID INT @managerID INT OUTPUT OUTPUT AS AS BEGIN BEGIN SELECT SELECT @managerID @managerID = = ManagerID ManagerID FROM FROM HumanResources.Employee HumanResources.Employee WHERE WHERE EmployeeID EmployeeID = = @employeeID @employeeID END END
Conectividad bases de datos con JAVA. JDBC (Antonio S. Cofio, Marta Zorrilla. Univ. Cantabria)

Feb, 2009, Pg.23

Ejemplo. Uso de transacciones


import import java.sql.*; java.sql.*; public class public class EjecutarTransacciones{ EjecutarTransacciones{ public static public static void void main(String[] main(String[] args) args) {{ try try {{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance(); Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance(); String String url url == "jdbc:odbc:Cine"; "jdbc:odbc:Cine"; Connection con Connection con == DriverManager.getConnection(url, DriverManager.getConnection(url, "", "", ""); ""); try { try { //Switch //Switch to to manual manual transaction transaction mode mode by by setting setting autocommit autocommit to to false false and and starts starts manual manual tran. tran. con.setAutoCommit(false); con.setAutoCommit(false); Statement stmt = con.createStatement(); Statement stmt = con.createStatement(); stmt.executeUpdate("INSERT INTO tribunal(Idper,idfest,numedic) stmt.executeUpdate("INSERT INTO tribunal(Idper,idfest,numedic) VALUES(1,2,56)"); VALUES(1,2,56)"); stmt.executeUpdate("INSERT stmt.executeUpdate("INSERT INTO INTO tribunal(Idper,idfest,numedic) tribunal(Idper,idfest,numedic) VALUES(1,1,80)"); VALUES(1,1,80)"); con.commit(); //it commits the transaction and starts a new one. con.commit(); //it commits the transaction and starts a new one. stmt.close(); //This turns off the transaction. stmt.close(); //This turns off the transaction. System.out.println("Transaction succeeded.Both records were written to DB."); System.out.println("Transaction succeeded.Both records were written to DB."); } } catch catch (SQLException (SQLException ex) ex) {{ ex.printStackTrace(); ex.printStackTrace(); try try {{ con.rollback(); con.rollback(); System.out.println("Transaction System.out.println("Transaction failed.No failed.No records records were were written written to to DB."); DB."); }} catch catch (SQLException (SQLException se) se) {{ se.printStackTrace(); se.printStackTrace(); }} }} }} catch (Exception catch (Exception e) e) {{ e.printStackTrace(); e.printStackTrace(); }} }} }} Conectividad bases de datos con JAVA. JDBC (Antonio S. Cofio, Marta Zorrilla. Univ. Cantabria) Feb, 2009, Pg.24

iBatis
iBatis es un framework que facilita el diseo de la capa de persistencia utilizada en las aplicaciones Java para acceder a nuestro repositorio de datos. iBatis une los Objetos con las sentencias SQL mediante un descriptor XML. iBatis necesita uno o ms ficheros con las sentencias SQL que usar el programa Ibatis necesita un fichero de configuracin en XML donde se indiquen los parmetros de conexin a la base de datos y los ficheros de mapeo XML

Conectividad bases de datos con JAVA. JDBC (Antonio S. Cofio, Marta Zorrilla. Univ. Cantabria)

Feb, 2009, Pg.25

Hibernate
Hibernate es una herramienta de Mapeo objeto-relacional para la plataforma Java (y disponible tambin para .Net con el nombre de NHibernate) que facilita el mapeo de atributos entre una base de datos relacional tradicional y el modelo de objetos de una aplicacin, mediante archivos declarativos (XML) que permiten establecer estas relaciones. Hibernate no requiere conocer el modelo de datos al cual se accede. Se tiene una aplicacin Orientada a objetos y se mapea el diseo OO en una capa de persistencia. La mayor diferencia entre Hibernate e iBATIS proviene del hecho de que el ltimo basa su funcionamiento en el mapeo de sentencias SQL que se incluyen en ficheros XML. Eso significa que, al contrario que Hibernate, requiere conocimiento de SQL por parte del programador. Por otra parte, permite la optimizacin de las consultas, ya sea con lenguaje estndar o con SQL propietario del motor de base de datos utilizado. Con iBATIS, siempre se sabe lo que se est ejecutando en la base de datos y permite generar consultas dinmicas muy potentes.

Conectividad bases de datos con JAVA. JDBC (Antonio S. Cofio, Marta Zorrilla. Univ. Cantabria)

Feb, 2009, Pg.26

Referencias
Referencias Tutorial JDBC: http://java.sun.com/docs/books/tutorial/jdbc/index.html SQL Server y JDBC http://msdn.microsoft.com/es-es/library/bb418503.aspx Oracle y JDBC http://w2.syronex.com/jmr/edu/db/oracle-and-java http://www.oracle.com/technology/tech/java/sqlj_jdbc/htdocs/jdbc_faq.html iBatis http://ibatis.apache.org/ Hibernate http://www.hibernate.org/

Conectividad bases de datos con JAVA. JDBC (Antonio S. Cofio, Marta Zorrilla. Univ. Cantabria)

Feb, 2009, Pg.27

Conectividad bases de datos con JAVA. JDBC (Antonio S. Cofio, Marta Zorrilla. Univ. Cantabria)

Feb, 2009, Pg.28

También podría gustarte