Persistencia (Conexión JDBC)
Persistencia (Conexión JDBC)
Persistencia (Conexión JDBC)
Class.forName("com.mysql.jdbc.Driver");
while (rs.next()) {
String name = rs.getString("titulo");
float price = rs.getFloat("precio");
System.out.println(name + "\t" + price);
}
rs.close();
stmt.close(); Bambi 3.0
conn.close();
} Batman 4.0
}
import java.sql.*;
public class HolaMundoBaseDatos {
public static void main(String[] args)
throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.jdbc.Driver");
Carga del
driver
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/sample","root","pass");
while (rs.next()) {
String name = rs.getString("titulo");
float price = rs.getFloat("precio");
System.out.println(name + "\t" + price);
}
rs.close()
stmt.close();
conn.close();
}
}
Introduccin a JDBC
Carga del driver
Antes de poder conectarse a la base de datos
es necesario cargar el driver JDBC
Slo hay que hacerlo una nica vez al
comienzo de la aplicacin
Class.forName("com.mysql.jdbc.Driver");
while (rs.next()) {
String name = rs.getString("titulo");
float price = rs.getFloat("precio");
System.out.println(name + "\t" + price);
}
rs.close()
stmt.close();
conn.close();
}
}
Introduccin a JDBC
Establecer una conexin
Las bases de datos actan como servidores y
las aplicaciones como clientes que se
comunican a travs de la red
Un objeto Connection representa una
conexin fsica entre el cliente y el servidor
Para crear una conexin se usa la clase
DriverManager
Se especifica la URL, el nombre y la
contrasea
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/sample","root","pass");
Introduccin a JDBC
Establecer una conexin
El formato de la URL debe especificarse en el
manual de la base de datos
Ejemplo de MySQL
jdbc:mysql://<host>:<puerto>/<esquema>
jdbc:mysql://localhost:3306/sample
Class.forName("com.mysql.jdbc.Driver");
Class.forName("com.mysql.jdbc.Driver");
while (rs.next()) {
String name = rs.getString("titulo");
float price = rs.getFloat("precio");
System.out.println(name + "\t" + price);
}
rs.close()
stmt.close(); Acceso al conjunto
conn.close(); de resultados
}
}
Introduccin a JDBC
Acceso al conjunto de resultados
while (rs.next()) {
String name = rs.getString("titulo");
float price = rs.getFloat("precio");
System.out.println(name + "\t" + price);
}
import java.sql.*;
public class HolaMundoBaseDatos {
public static void main(String[] args)
throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.jdbc.Driver");
while (rs.next()) {
String name = rs.getString("titulo");
float price = rs.getFloat("precio");
System.out.println(name + "\t" + price);
}
rs.close()
stmt.close();
conn.close();
Librerar Recursos
}
}
Introduccin a JDBC
Liberar recursos
Cuando se termina de usar una Connection,
un Statement o un ResultSet es necesario
liberar los recursos que necesitan
Puesto que la informacin de un ResultSet
no se carga en memoria, existen conexiones
de red abiertas
Mtodos close():
ResultSet.close() Libera los recursos del
ResultSet. Se cierran automticamente al cerrar el
Statement que lo cre o al reejecutar el Statement.
Statement.close() Libera los recursos del
Statement.
Connection.close() Finaliza la conexin con la
base de datos
import java.sql.*;
public class HolaMundoBaseDatos { Manejar los errores
public static void main(String[] args)
throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.jdbc.Driver");
while (rs.next()) {
String name = rs.getString("titulo");
float price = rs.getFloat("precio");
System.out.println(name + "\t" + price);
}
rs.close()
stmt.close();
conn.close();
}
}
Introduccin a JDBC
Manejar los errores
Hay que gestionar los errores apropiadamente
Se pueden producir excepciones
ClassNotFoundException si no se encuentra
el driver
Se pueden producir excepciones
SQLException al interactuar con la base de
datos
SQL mal formado
Conexin de red rota
Problemas de integridad al insertar datos (claves
duplicadas)
import java.sql.*;
public class HolaMundoGestionErrores {
Gestin de
public static void main(String[] args) {
errores en la
try { localizacin
Class.forName("com.mysql.jdbc.Driver"); del driver
} catch (ClassNotFoundException e) {
System.err.println("El driver no se encuentra");
System.exit(-1);
}
String url =
"jdbc:mysql://localhost:3306/sample?user=root&password=pass";
Connection c = DriverManager.getConnection(url);
Llamadas a procedimientos
almacenados
CallableStatement s =
conn.prepareCall(...);
Sentencias SQL
Uso de Statement
Tiene diferentes mtodos para ejecutar
una sentencia
executeQuery(...)
Se usa para sentencias SELECT. Devuelve un
ResultSet
executeUpdate()
Se usa para sentencias INSERT, UPDATE,
DELETE o sentencias DDL. Devuelve el
nmero de filas afectadas por la sentencia
execute()
Mtodo genrico de ejecucin de consultas.
Puede devolver uno o ms ResulSet y uno o
ms contadores de filas afectadas.
Sentencias SQL
Uso de
PreparedStatement
Los PreparedStatement se utilizan:
Cuando se requieren parmetros
Cuando se ejecuta muchas veces la misma sentencia
La sentencia se prepara al crear el objeto
Puede llamarse varias veces a los mtodos execute
PreparedStatement ps = conn.
prepareStatement("INSERT INTO Libros VALUES (?,?,?)");
ps.setInt(1, 23);
ps.setString(2, "Bambi");
ps.setInt(3, 45);
ps.executeUpdate();
Sentencias SQL
Uso de
CallableStatement
Permite hacer llamadas a los procedimientos
almacenados de la base de datos
Permite parmetros de entrada IN (como el
PreparedStatement), parmetros de entrada-
salida INOUT y parmetros de salida OUT
CallableStatement cstmt =
conn.prepareCall ("{call getEmpName (?,?)}");
cstmt.setInt(1,111111111);
cstmt.registerOutParameter(2,java.sql.Types.VARCHAR);
cstmt.execute();
createStatement(
int resultSetType, int resultSetConcurrency);
prepareStatement(String SQL,
int resultSetType, int resultSetConcurrency);
prepareCall(String sql,
int resultSetType, int resultSetConcurrency);
Uso de ResultSet
Caractersticas
Caractersticas del ResultSet
resultSetType
ResultSet.TYPE_FORWARD_ONLY Slo movimiento
hacia delante (por defecto)
ResultSet.TYPE_SCROLL_INSENSITIVE Puede hacer
cualquier movimiento pero no refleja los cambios en la
base de datos
ResultSet.TYPE_SCROLL_SENSITIVE Puede hacer
cualquier movimiento y adems refleja los cambios en la
base de datos
resultSetConcurrency
ResultSet.CONCUR_READ_ONLY Slo lectura (por
defecto)
ResultSet.CONCUR_UPDATABLE - Actualizable
Uso de ResultSet
Caractersticas
Actualizacin de datos
rs.updateString(campo", valor");
rs.updateInt(1, 3);
rs.updateRow();
Insercin de datos
rs.moveToInsertRow();
rs.updateString(1, "AINSWORTH");
rs.updateInt(2,35);
rs.updateBoolean(3, true); Mueve el cursor a
rs.insertRow(); la posicin
anterior al
rs.moveToCurrentRow(); movimiento a
insercin
Uso de ResultSet
Posicionamiento del cursor
Felipe Steffolani
[email protected]