Anda di halaman 1dari 21

Java Developer

Junior
Edwin Marav
Bases de datos
con JAVA
Edwin Marav.
emaravi@cjavaperu.com
www.cjavaperu.com
En esta leccin usted aprender:
Realizar mantenimientos de bases
de datos con JAVA y JDBC.
Objetivos
www.cjavaperu.com
Statement
Nos permite ejecutar una sentencias SQL sin parmetros, generando
sentencias SQL dinmicas.
El uso de SQL dinmico no es recomendable por que conlleva a un
conjunto de inconvenientes como complejidad de uso, conflictos con
comillas simples, Inyeccin SQL, entre otros.
Si desea ejecutar sentencias como Insert, Update, Delete que no
retornan conjunto de registros debe llamar al mtodo executeUpdate.
Si desea ejecutar sentencias como Select que retornan un conjunto de
registros debe llamar al mtodo executeQuery y almacenar el resultado
en un objeto ResultSet.
String nombre = emaravi";
double sueldo = 7000;
//SQL dinmico
String SQL = "insert into empleado (emp_nom, emp_sueldo) " +
" values('" + nombre + "'," + sueldo + ")";
www.cjavaperu.com
Insercin de registros a una tabla
El mtodo executeUpdate() permite insertar registros a una
tabla.
El cdigo necesario para insertar un registro en la tabla
authors es:
String str = "INSERT INTO authors (au_id, au_lname,
au_fname, address, city, state, contract) VALUES
('998-72-3568', 'Ringer','Albert','801 826-0752 67
Seventh Av.', 'Salt Lake City','UT','1')";
Statement stmt = con.createStatement();
int count = stmt.executeUpdate(str);
Usando la API JDBC
www.cjavaperu.com
Actualizando registros a una tabla:
El cdigo necesario para actualizar un registro a la
tabla authors es:
String str = "UPDATE authors SET address='10932 Second
Av. WHERE au_id='998-72-3568'";
Statement stmt = con.createStatement();
int count = stmt.executeUpdate(str);
Eliminando registros de una tabla:
El cdigo necesario para eliminar un registro a la tabla
authors es:
String str = "DELETE FROM authors WHERE au_id='998-72-3568'";
Statement stmt = con.createStatement();
int count = stmt.executeUpdate(str);
Usando la API JDBC
www.cjavaperu.com
Creando una Tabla
La sentencia CREATE TABLE se usa para crear y definir la
estructura de una tabla en la base de datos.
El cdigo necesario es:
String str="CREATE TABLE MyProduct"
+" (p_id INTEGER,"
+"p_name VARCHAR(25),"
+"rate FLOAT,"
+"unit_msr CHAR(6))";
Statement stmt=con.createStatement();
stmt.execute(str);
Usando la API JDBC
www.cjavaperu.com
Alterando y eliminando una tabla
DDL provee la sentencia ALTER para modificar la definicin de un
objeto de base de datos.
El cdigo necesario para agregar una columna a la tabla
MyProduct es:
String str="ALTER TABLE MyProduct "
+"ADD quantity INTEGER";
Statement stmt=con.createStatement();
stmt.execute(str);
DDL provee la sentencia DROP TABLE para eliminar la tabla de la
base de datos.
El cdigo necesario para eliminar una tabla es:
String str="DROP TABLE MyProduct";
Statement stmt=con.createStatement();
stmt.execute(str);
Usando la API JDBC
www.cjavaperu.com
Manejando Excepciones SQL
El paquete java.sql provee la clase SQLException, que es
subclase de la clase java.lang.Exception.
Puede capturar el SQLException en una aplicacin Usando try -
catch
La clase SQLException contiene varios mtodos que proveen
informacin de los errores:
int getErrorCode(): Retorna el codigo de error asignado
al error SQL.
String getSQLState(): Retorna el cdigo del error.
SQLException getNextException(): Retorna la siguiente
excepcin.
Usando la API JDBC
www.cjavaperu.com
Statement
//Importacin
import java.sql.Statement;
//Objeto Statement
Statement cmd;
cmd = cn.createStatement(); //cn es un objeto Connection
//SQL
String SQL = "delete from empleado where emp_id = " + id;
//Ejecutar la orden
int regAfectados = cmd.executeUpdate(SQL);
www.cjavaperu.com
PreparedStatement
Nos permite ejecutar una sentencias SQL con parmetros, generando
sentencias ms slida y eficiente que el uso de SQL dinmico.
No requiere concatenar con las comillas simples para aquellos campos
de tipo char o varchar, adems no existe conflicto si se le enva
comillas simples a los valores de la variables y por ultimo evita la
inyeccin SQL.
//Importaciones
import java.sql.PreparedStatement;
//SQL con parmetros
String SQL="insert into empleado (emp_nom,emp_sueldo) values(?,?)";
//Objeto PreparedStatement
PreparedStatement cmd = cn.prepareStatement(SQL);
//Asignar valores a los parmetros
cmd.setString(1, "Gustavo");
cmd.setDouble(2, 7000);
//Ejecutar la orden
int regAfectados = cmd.executeUpdate();
www.cjavaperu.com
ResultSet
Representa los datos devueltos por una consulta (select)
Las consultas devuelven cero o mltiples filas de la base de datos. Para
desplazarse por cada fila se usa el mtodo next(), y getXXX para
recuperar un valor de la columna (getString(), getDouble(), etc).
Si desea averiguar si un campo a devuelto un valor null use wasNull();
//Importaciones
import java.sql.ResulSet;
//SQL con parmetros
String SQL="select * from empleado where emp_nom like ?";
//Objeto PreparedStatement
PreparedStatement cmd = cn.prepareStatement(SQL);
//Asignar valores a los parmetros
cmd.setString(1, "G%");
//Ejecutar la orden
ResultSet rs = cmd.executeQuery();
www.cjavaperu.com
ResultSet
//Realizar un recorrido
while(rs.next()) {
String nombre = rs.getString("emp_nom");
double sueldo = rs.getDouble("emp_sueldo");
. . .
}
rs.close();
www.cjavaperu.com
Consultando una tabla
La sentencia SELECT es ejecutada usando el mtodo
executeQuery() que retorna un objeto a ResultSet.
El cdigo para extraer los datos de la tabla authors
es:
String str = "SELECT * FROM authors";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(str);
Usando la API JDBC
www.cjavaperu.com
Transaccin
Por defecto, las conexiones JDBC se inician en modo auto-commit.
Para desactivarlo y activarlo se emplea el mtodo setAutoCommit.
Use commit() para confirmar la transaccin y rollback() para deshacer
la transaccin.
//Sentencias SQL
String SQL1 = "insert . . .";
String SQL2 = "update . . .";
//Desactivar el AutoCommit
cn.setAutoCommit(false);
//Objeto PreparedStatement
PreparedStatement cmd1 = cn.prepareStatement(SQL1);
PreparedStatement cmd2 = cn.prepareStatement(SQL2);
//Ejecutar la orden
int regAfectados1 = cmd1.executeUpdate();
int regAfectados2 = cmd2.executeUpdate();
cn.commit(); //ok
cn.rollback(); //error
www.cjavaperu.com
CallableStatement
Nos permite ejecutar procedimientos almacenados.
//Importaciones
import java.sql.CallableStatement;
//Procedimiento Almacenado
String SP="{call uspEmpleadoInsertar(?,?,?)}";
//Objeto CallableStatement
CallableStatement cmd = cn.prepareCall(SP);
//Asignar valores a los parmetros
cmd.registerOutParameter(1, Types.INTEGER);
cmd.setString(2, emaravi");
cmd.setDouble(3, 7000);
//Ejecutar la orden
int regAfectados = cmd.executeUpdate();
//Recuperar el valor del parmetro de salida
int ID = cmd.getInt(1);
www.cjavaperu.com
Desarrollar el mantenimiento de la tabla
tb_productos de la base de datos de ventas.
Ejercicio:
www.cjavaperu.com
cursos@cjavaperu.com
En esta leccin usted aprendi:
La arquitectura JDBC consta de dos capas:
Capa de aplicacin JDBC: Una
aplicacin java usa la API JDBC para
interactuar con el driver manager de
JDBC.
Capa de driver JDBC: Contiene un
driver, como un driver de SQL
Server, que le da la capacidad a la
aplicacin java de conectarse a una
base de datos. Esta capa actua como
intermediaro entre la aplicacin JAVA
y la base de datos.
El driver manager de JDBC administra
varios drivers de JDBC.
El driver JDBC es unsoftware que una
aplicacin java usa para acceder a las
bases de datos.
Resumen
www.cjavaperu.com
JDBC soporta varios tipos de drivers:
Driver puente JDBC-ODBC
Driver Nativo-API Partly-Java
Driver JDBC-Net Pure-Java
Driver Nativo Protocol Pure-Java
la API JDBC consiste de varias clases e
interfaces que le dan la capacidad a la
aplicacin java de interactuar con bases de
datos.
Las clases e interfases de la API JDBC son
definidos en el paquete java.sql y
javax.sql.
Puede cargar y registrar un driver con el
driver manager programticamente o
manualmente
Hay dos modos de cargar undriver
programticamente:
Usando el mtodo Class.forName()
Usando el mtodo registerDriver()
Resumen
www.cjavaperu.com
Un objeto Connection establece la
conexin entre la aplicacin java y la
base de datos.
Un objeto Statement envia peticiones y
obtiene resultados de la base de datos.
Puede insertar, actualizar y eliminar
datos de la tabla usando sentencias SQL
en aplicaciones JAVA
Puede cerar, alterar o elimnar tablas de
la base de datos usando sentencias SQL
en aplicaciones java.
Un objeto ResultSet alamcena
resultados extraidos de la base de datos
cuando se ejecuta una sentencia
SELECT.
Puede crear varios tipos de objetos
ResultSet como: read only, updatable, y
forward only.
Resumen
www.cjavaperu.com
Muchas Gracias