Contenido
• Stream – Clase File
– Entrada/Salida
• JDBC – Concepto.
– Conexiones a base de datos.
– Envíos de sentencias SQL.
– Proceso de resultados.
– Talleres.
4
Archivos
• Clase File
• Constructores
– File( String ruta)
– File( String ruta, String nombre)
– File( File directorio, String nombre)
• Constructores de otras clases
– FileReader( File archivo)
– FileWriter( File archivo)
Métodos
• canRead() comprueba si el archivo se puede leer
• canWrite() comprueba siel archivo se puede escribir
• delete() borra dicho archivo
• getPath() devuelve la ruta del archivo
• mkdir() crea un directorio con la ruta del objeto que lo recibe
• isDirectory() comprueba si dicho archivo es un directorio
ENTRADA /SALIDA
FUENTE
PROGRAMA
stream
leer
•Para obtener información:
información
Un stream representa un flujo de información (Bytes)
ENTRADA /SALIDA
DESTINO
PROGRAMA
stream
escribe
•Para escribir información:
DESTINO: archivo, dispositivo salida.
información
• En términos de programación se denomina entrada a la posibilidad de introducir datos hacia un programa; salida sería la capacidad de un programa de mostrar información al usuario
ENTRADA /SALIDA
Entrada/Salida básica: desde un dispositivo de entrada o hacia un dispositivo de salida (teclado / monitor).
Entrada/Salida desde archivos dentro de un mismo proceso.
ENTRADA /SALIDA
• Los programas se comunican con flujos y
estos flujos actúan como interfaz con el
dispositivo o clase asociada
– Operación independiente del tipo de datos y del
dispositivo
ENTRADA /SALIDA
• Leer – abrir un stream – mientras haya información – leer información – cerrar el stream
• Escribir – abrir el stream – mientras haya información – escribir información – cerrar el stream
ENTRADA /SALIDA
12
Subclases de Reader
• InputStreamReader: convierte un stream de bytes en un stream de chars.
– FileReader: se asocia a files de chars para leerlos.
• BufferedReader: proporciona entrada de caracteres a través de un buffer (más eficiencia).
13
Subclases de Writer
• OutputStreamWriter: convierte un stream de bytes en un stream de chars. – FileWriter: se asocia a files de chars para
modificarlos.
• BufferedWriter: proporciona salida de caracteres a través de un buffer (más eficiencia).
• PrintWriter: métodos print() y println() para distintos tipos de datos.
• Java tiene acceso a la entrada/ salida estándar a través de la clase java. lang. System
• Los flujos estándar son campos estáticos de System
• .System. in implementa la entrada estándar
• .System. out implementa la salida estándar
• .System. err implementa la salida de error
ENTRADA /SALIDA (INF. II)
15
Típicos Usos de los Streams (lectura por líneas)
public static void main(String[] args) throws IOException { // 1a. Se lee un file línea a línea BufferedReader in = new BufferedReader( new
FileReader("IOStreamDemo.java")); String s, s2 = new String(); while((s = in.readLine())!= null) s2 += s + "\n"; in.close(); // 1b. Se lee una línea por teclado BufferedReader stdin = new BufferedReader( new
InputStreamReader(System.in)); System.out.print("Enter a line:");
System.out.println(stdin.readLine()); }
17
Típicos Usos de los Streams (escritura por líneas)
// throws IOException
String []s = {“hola“, “que”, “tal”};
// Se inicializa s
PrintWriter out1 = new PrintWriter( new BufferedWriter( new FileWriter("IODemo.out")));
int lineCount = 1;
for (int i=0; i<s.length(); i++)
out1.println(lineCount++ + ": " + s[i]);
out1.close();
Concepto
• Es un API (Interfaz para desarrollo de aplicaciones) para interactuar con bases de datos desde el lenguaje Java.
• Permite:
– La conexión con la base de datos.
– La extracción y manipulación de los datos de la base de datos.
– La llamada a procedimientos y funciones almacenadas.
Concepto
• La aplicación Java debe tener acceso a un controlador (driver) JDBC adecuado.
• Este controlador es el que implementa la funcionalidad de todas las clases de acceso a datos y proporciona la comunicación entre el API JDBC y la base de datos real.
Concepto
Aplicación Java
Oracle DB2 Microsoft SQL
Server
MySQL
Driver JDBC Oracle
Driver JDBC DB2
Driver JDBC SQL
Server
Driver JDBC
MySQL
Conexiones a base de datos
• Lo primero que debemos hacer es agregar el driver necesario a nuestro proyecto.
Conexiones a base de datos
• Y luego creamos una clase que nos representará una conexión con la Base de Datos.
public class Conexion { private static Connection con; public static Connection getConexion() { if (con == null ) { inicializaConexion(); } return getCon(); } public static Connection getCon() { return con; }
Conexiones a base de datos
protected static void inicializaConexion() { try { String url="jdbc:oracle:thin:@127.0.0.1:1521:XE"; String user="usuario"; String password="clave"; DriverManager.registerDriver( new oracle.jdbc.driver.OracleDriver()); con=DriverManager.getConnection(url,user,password); con.setAutoCommit(false); System.out.println("Conexion Exitosa"); } catch(Exception e) { ex.printStackTrace(); } }
En el método inicializaConexion podemos darnos cuenta que:
Conexiones a base de datos
public static void cerrarConexion() { if(con!=null) { try { con.close(); System.out.println("Conexión cerrada con éxito"); } catch(SQLException sqle) { e.printStackTrace(); } } } }
Conexiones a base de datos
– Creamos una url q contiene:
• La ip de la pc que contiene la base de datos.
• El puerto por el que se realizará la conexión.
• El nombre del servicio asociado a la base de datos.
– El usuario y la contraseña de la base de datos.
– El registro del driver necesario.
– La creación de la conexión a partir del driver.
Envío de sentencias SQL
• Se ejecuta la sentencia por medio de la conexión que poseemos.
• Dicha ejecución nos retorna un objeto de la clase ResultSet, que contiene todos los registros respectivos.
Envío de sentencias SQL
Connection con = Conexión.getConexion(); ResultSet res; String sql = "select id_categoria, descripcion from categorias"; res = con.createStatement().executeQuery(sql);
En este ejemplo, tendríamos guardado en nuestro objeto resCat todos los registros que resultaron de la ejecución de la sentencia SQL.
Envío de sentencias SQL
• Podemos también ejecutar sentencias SQL con variables bind.
Connection con = Conexión.getConexion(); ResultSet res; String sql = “select id_pelicula, nombre_pelicula ”+ “from alq_peliculas ”+ “where id_categoria = ?”; int id_categoria = 23; PreparedStatement pst; pst = con.prepareStatement(sql); pst.setInt(1, id_categoria); res = pst.executeQuery();
Proceso de resultados
• Consta del recorrido de nuestro objeto ResultSet, y los procesos que se deseen hacer sobre cada registro del mismo.
while (res.next()) { System.out.print(“Id: ”+ res.getInt(1)); System.out.println(“ – Pelicula: ”+res.getString(2)); }
Proceso de resultados
• En la primera iteración, el método next intenta ubicar un puntero en el primer registro del resultado. Además devuelve true si lo logra.
• Para las siguientes iteraciones, el método seguirá recorriendo cada registro hasta que ya no encuentre más. En ese instante, devuelve false.
Proceso de resultados
• Para obtener los campos de un registro usamos el método getInt, getString, etc., dependiendo del tipo de dato que corresponda para el campo.
– El parámetro corresponde a la posición del campo en la cabecera de la sentencia select.