jdbc: java database conectivity -...

23
JDBC: Java JDBC: Java DataBase DataBase Conectivity Conectivity Integrantes: Pablo Integrantes: Pablo Benapr Benapr é é s s M. M. Tom Tom á á s s Girardi Girardi J. J. Roberto Vargas H. Roberto Vargas H.

Upload: ngotu

Post on 30-Sep-2018

228 views

Category:

Documents


0 download

TRANSCRIPT

JDBC: Java JDBC: Java DataBaseDataBase ConectivityConectivity

Integrantes: Pablo Integrantes: Pablo BenaprBenaprééss M.M.TomTomáás s GirardiGirardi J.J.Roberto Vargas H.Roberto Vargas H.

IntroducciIntroduccióónn

Que es? Que es? •• APIAPI•• DriverDriver•• JavaJava•• InteractInteractúúa con bases de datosa con bases de datos•• Ejecuta consultasEjecuta consultas•• Recibe resultados de consultasRecibe resultados de consultas

APIAPI’’ss JavaJava

Interfaz de ProgramaciInterfaz de Programacióón de Aplicaciones n de Aplicaciones Herramientas para desarrollo de Herramientas para desarrollo de aplicaciones.aplicaciones.•• Conjunto de clases (en paquetes)Conjunto de clases (en paquetes)

MetodosMetodos e Instancias para cumplir una serie de e Instancias para cumplir una serie de tareas relacionadas con la funcitareas relacionadas con la funcióón de la API.n de la API.

Ejemplos:Ejemplos:•• JAXP JAXP --> XML> XML•• Swing Swing --> GUI> GUI•• AWT AWT --> GUI> GUI

DriversDrivers JDBCJDBCTipo1 Tipo1 -- JDBCJDBC--DB DB DriversDrivers•• Para conexiPara conexióón con DBn con DB•• Utilizan puente desarrollado por Sun e Utilizan puente desarrollado por Sun e InterSolvInterSolv..•• Software noSoftware no--Java en clienteJava en cliente•• Implementado con cImplementado con cóódigo nativo.digo nativo.

Tipo2 Tipo2 –– DriversDrivers APIAPI’’ss nativas parcialmente en javanativas parcialmente en java•• CCóódigo nativo con pequedigo nativo con pequeñña envoltura Javaa envoltura Java•• Mayor rapidezMayor rapidez•• Menos seguridad: cMenos seguridad: cóódigo nativo puede producir cadigo nativo puede producir caíída de la mda de la mááquina quina

virtual.virtual.Tipo 3 Tipo 3 –– DriversDrivers de protocolo de redde protocolo de red•• Completamente en JavaCompletamente en Java•• AplicaciAplicacióón intermedian intermedia•• Protocolo de red genProtocolo de red genéérico que interactrico que interactúúa con aplicacia con aplicacióón intermedia.n intermedia.

Tipo 4 Tipo 4 –– DriversDrivers completamente Javacompletamente Java•• Completamente en JavaCompletamente en Java•• No requieren de aplicaciNo requieren de aplicacióón intermedian intermedia•• InteractInteractúúa directamente con a directamente con DatabaseDatabase

HistoriaHistoriaAAññoo VersiVersióónn EspecificaciEspecificacióón n

JSRJSRImplementaciImplementacióón n

JDKJDK

2006 2006 JDBC 4.0 JDBC 4.0 JSR 221 JSR 221 Java SE 6 Java SE 6

2001 2001 JDBC 3.0 JDBC 3.0 JSR 54 JSR 54 JDK 1.4 JDK 1.4

1999 1999 JDBC 2.1 JDBC 2.1 JDK 1.2JDK 1.2

1997 1997 JDBC 1.2 JDBC 1.2 JDK 1.1JDK 1.1

InstalaciInstalacióónn

Instalar correctamente el JDKInstalar correctamente el JDK•• JDBC viene incluido en el JDK por lo que JDBC viene incluido en el JDK por lo que

no es necesario instalar nada adicional no es necesario instalar nada adicional para el sistema base. para el sistema base.

Cada Cada driverdriver tiene requerimientos distintos tiene requerimientos distintos como se vercomo se veráá mmáás adelante. Los mas s adelante. Los mas ttíípicos vienen incluidos en algunas JDK picos vienen incluidos en algunas JDK (Eje: (Eje: NetBeansNetBeans 6.1)6.1)

Bases de datos soportadas:Bases de datos soportadas:

•IBM DB2

•ODBC

•Microsoft SQL Server

•Oracle

•Cloudscape

•Cloudscape RMI

•Firebird

•IDS Server

•MySQL

•PostgreSQL

•Sybase

•PointBase embedded server

•InstantDB

•Hypersonic SQL

•Informix Dynamin Server

Fuente: http://www.devx.com/tips/Tip/28818

ProgramaciProgramacióón Java de JDBC:n Java de JDBC:

Incluir librerIncluir libreríías:as:•• Propias la Base de Datos usada.Propias la Base de Datos usada.

EjEj: : MySQLMySQL -- > > mysqlmysql--connectorconnector--javajava--5.1.55.1.5--binbin

•• ¿¿Como?Como?JarJar

•• Incluir librerIncluir libreríía (a (xxx.jarxxx.jar) dentro del ) dentro del jarjar..•• SetearSetear ““ClassClass--PathPath”” en archivo en archivo ““MANIFEST.MFMANIFEST.MF””

EjEj: : ClassClass--PathPath: : mysqlmysql--connectorconnector--javajava--5.1.55.1.5--bin.jarbin.jar

Ejecutando .Ejecutando .classclass directamentedirectamente•• Java Java ejemploJDBCejemploJDBC ––classpathclasspath liblib//mysqlmysql--connectorconnector--javajava--5.1.55.1.5--bin.jarbin.jar

EjEj: : NetbeansNetbeans

FuncionamientoFuncionamiento

ProgramaciProgramacióón Java de JDBC:n Java de JDBC:

Cargar los Cargar los driversdrivers::EjEj: JDBC: JDBC--MySQLMySQL••Crea Instancia en Crea Instancia en DriverManagerDriverManager..

ImportImport java.sqljava.sql.*;.*;

Class.forNameClass.forName((““com.com.mysqlmysql.jdbc.Driver.jdbc.Driver””););

ProgramaciProgramacióón Java de JDBC: n Java de JDBC: Establecer la conexiEstablecer la conexióón:n:

ConnectionConnection con = con = DriverManager.getConnectionDriverManager.getConnection((

StringString urlurl,,StringString usuariousuario,,StringString passwordpassword};};

•• Ejemplo de URLEjemplo de URL

jdbc:jdbc:mysqlmysql:://<:://<hosthost>:<>:<puertopuerto>/<>/<base de base de datosdatos>>

ProgramaciProgramacióón Java de JDBC:n Java de JDBC:

Otras bases de datos:Otras bases de datos:

•• PostgreSQLPostgreSQL (>7.0):(>7.0):

Class.forNameClass.forName((““org.postgresql.Driverorg.postgresql.Driver””))urlurl == jdbc:postresqljdbc:postresql://<://<hosthost>:<>:<portport>/<DB>>/<DB>

•• ODBC: ODBC:

Class.forNameClass.forName((““sun.jdbc.odbc.JdbcOdbcDriversun.jdbc.odbc.JdbcOdbcDriver””))urlurl = = jdbc.odbcjdbc.odbc:<DB>:<DB>

ProgramaciProgramacióón Java de JDBC:n Java de JDBC:EjecuciEjecucióón DDL (Data n DDL (Data DefinitionDefinitionLanguageLanguage))•• CreaciCreacióón de tablas:n de tablas:

StringString sentenciaDDLsentenciaDDL = = ““CREATE TABLE CREATE TABLE EJEMPLOEJEMPLO((

campo1 FLOAT,campo1 FLOAT,campo2 VARCHAR(40),campo2 VARCHAR(40),campo3 DATEcampo3 DATE))””;;

•• ‘‘;;’’ No necesarioNo necesario

ProgramaciProgramacióón Java de JDBC:n Java de JDBC:EjecuciEjecucióón DDL (Data n DDL (Data DefinitionDefinition LanguageLanguage))•• ModificaciModificacióón de Tablas:n de Tablas:

CreaciCreacióón n statementstatement (solo necesario si no (solo necesario si no existe).existe).

StatementStatement stst = = concon.createStatement.createStatement();();

st.executeUpdate(st.executeUpdate(sentenciaDDLsentenciaDDL););

ProgramaciProgramacióón Java de JDBC:n Java de JDBC:CreaciCreacióón de tablas e insercin de tablas e insercióón:n:

StringString queryquery == ““INSERT INTO EJEMPLO VALUES(INSERT INTO EJEMPLO VALUES(

164836789,164836789,

““Roberto VargasRoberto Vargas””,,

3131--1212--8686””))””;;

stst.executeStatement(query.executeStatement(query););

ProgramaciProgramacióón Java de JDBC:n Java de JDBC:Sentencias Sentencias QueryQuery::•• Ver Contenido de Tabla:Ver Contenido de Tabla:

StringString sentenciaQuerysentenciaQuery = = ““SELECT SELECT ** FROM FROM EJEMPLOEJEMPLO””;;

ResultSetResultSet rsrs = = stst.executeQuery(.executeQuery(sentenciaQuerysentenciaQuery))

rsrs.next.next();();

floatfloat fltflt = = rsrs.getFloat.getFloat((““campo1campo1””););

ProgramaciProgramacióón Java de JDBC:n Java de JDBC:ResultSetResultSet::

•• MultiplesMultiples tipos de tipos de getget::Enteros: Enteros: •• ((intint) ) getInt(StringgetInt(String nombreColumnanombreColumna))

•• ((intint) ) getInt(intgetInt(int numeroColumnanumeroColumna))

StringsStrings: : •• ((StringString) ) getString(StringgetString(String nombreColumnanombreColumna))

•• ((StringString) ) getString(intgetString(int numeroColumnanumeroColumna))

getBytegetByte((……), ), getBooleangetBoolean((……), ), getDoublegetDouble((……), ), getDategetDate((……), etc.), etc.

(ver (ver httphttp://://java sun comjava sun com/j2se/1 5 0//j2se/1 5 0/docsdocs//apiapi/java//java/sqlsql//ResultSet htmlResultSet html))

ProgramaciProgramacióón Java de JDBC: n Java de JDBC: Ahorro de cAhorro de cóódigo: digo: preparedStatementpreparedStatement!!

•• Sentencias repetitivas con campos variables:Sentencias repetitivas con campos variables:PreparesdStatementPreparesdStatement psps = = con.preparedStatementcon.preparedStatement((((StringString) ) QueryQuery))

StringString Es una sentencia normal, reemplazando los valores Es una sentencia normal, reemplazando los valores de los campos con de los campos con ‘‘??’’::

QueryQuery = = ““INSERT INTO LISTA VALUES(INSERT INTO LISTA VALUES(??, , ??))””;;

Ps.setStringPs.setString((11,,””FideosFideos””););

Ps.setDoublePs.setDouble((22,,””150.0150.0””););

((intint) N = ) N = Ps.executeUpdate(Ps.executeUpdate(voidvoid););

executeUpdateexecuteUpdate retorna 0 como DDL, el numero de filas retorna 0 como DDL, el numero de filas modificadas como modificadas como QueryQuery. . ÚÚtil para un til para un ““UPDATEUPDATE…… WHEREWHERE……””

ProgramaciProgramacióón Java de JDBC: n Java de JDBC: Integridad de datos: transaccionesIntegridad de datos: transacciones

Por defecto, una Por defecto, una queryquery (o DDL) se ejecuta en el (o DDL) se ejecuta en el momento que se hace un llamado a momento que se hace un llamado a executeUpdateexecuteUpdate() o () o executeStatementexecuteStatement(). Pero esto puede ser manipulado:(). Pero esto puede ser manipulado:

con.con.setAutoCommitsetAutoCommit((falsefalse););

De esta forma no se De esta forma no se efectuaefectua la transaccila transaccióón hasta que n hasta que se denote explse denote explíícitamente:citamente:

con.setAutoCommit(falsecon.setAutoCommit(false););…… varias varias sentenciassentencias……

con.commitcon.commit();();

……con.setAutoCommit(truecon.setAutoCommit(true););

JDBC 2.0: JDBC 2.0: Nuevas implementaciones: cursoresNuevas implementaciones: cursores

StatementStatement stmtstmt = = con.createStatementcon.createStatement( ( ResultSet.TYPE_SCROLLResultSet.TYPE_SCROLL_(_(IN)SENSITIVEIN)SENSITIVE, , ResultSet.CONCURResultSet.CONCUR_(_(READ_ONLY)UPDATABLEREAD_ONLY)UPDATABLE); );

rs.nextrs.next(); ();

rs.previousrs.previous(); (JDBC 2.0)(); (JDBC 2.0)

rs.absolute(intrs.absolute(int););

rs.relative(intrs.relative(int););

((booleanboolean) ) rs.isFirstrs.isFirst();();

((booleanboolean) ) rs.inLastrs.inLast();();

((booleanboolean) ) rs.isAfterLastrs.isAfterLast();();

Ver: Ver: http://java.sun.com/j2se/1.5.0/docs/api/java/sql/Re sultSet.html

JDBC 2.0: JDBC 2.0: Nuevas implementaciones: modificaciones Nuevas implementaciones: modificaciones a tiempo real:a tiempo real:

StatementStatement stmtstmt = = con.createStatementcon.createStatement( ( ResultSet.TYPE_SCROLLResultSet.TYPE_SCROLL_(_(IN)SENSITIVEIN)SENSITIVE, , ResultSet.CONCURResultSet.CONCUR_(_(READ_ONLY)UPDATABLEREAD_ONLY)UPDATABLE); );

Manipulación directa del ResultSet:• rs.updateXXX((String),(XXX));

• rs.updateRow();• rs.moveToInsertRow();• rs.deleteRow();

Ver: http://java.sun.com/j2se/1.5.0/docs/api/java/sql/Resul tSet.html

JDBC 2.0: JDBC 2.0: Nuevas implementaciones: ActualizaciNuevas implementaciones: Actualizacióón n por lotes:por lotes:

Parecido a las transacciones, pero como un Parecido a las transacciones, pero como un batchbatch::

st.addBatchst.addBatch((((StringString))……););……

((intint[]) []) st.executeBatchst.executeBatch();();

Retorna el numero de modificaciones hechas en cada fila Retorna el numero de modificaciones hechas en cada fila correspondiente a la correspondiente a la posicionposicion del arreglo.del arreglo.

st.clearBatchst.clearBatch();();

Referencias:Referencias:http://www.unix.com.ua/orelly/javahttp://www.unix.com.ua/orelly/java--ent/jenut/ch02_03.htment/jenut/ch02_03.htmhttphttp://://java.sun.comjava.sun.com/j2se/1.5.0//j2se/1.5.0/docsdocs//apiapi/java//java/sqlsql//ResultSetResultSet.html.htmlhttphttp://://www.devx.comwww.devx.com//tipstips//TipTip/28818/28818

““SugerenciaSugerencia”” para estudio:para estudio:

•• httphttp://://www.programacion.comwww.programacion.com//tutorialtutorial//jj dbcdbc//