auto dao - eliizquierdo/material_programacion_avanzada2026 GitHub Wiki

🧠 Autoevaluación — Patrón DAO y JDBC

Responde cada pregunta antes de ver la respuesta.


Pregunta 1

¿Qué significa DAO y cuál es su propósito?

  • A) Data Access Object; centraliza todas las operaciones de acceso a la base de datos para una entidad
  • B) Data Application Object; ejecuta los Servlets
  • C) Dynamic API Object; gestiona las sesiones HTTP
  • D) Database Admin Operations; administra los usuarios de MySQL
Ver respuesta

✅ A) Data Access Object; centraliza todas las operaciones de acceso a la base de datos para una entidad

💡 El DAO tiene un único propósito: hablar con la BD. Todos los INSERT, SELECT, UPDATE y DELETE para una entidad van en su DAO. El Servlet no sabe nada de SQL; solo llama a los métodos del DAO.


Pregunta 2

¿Cuáles son las 5 fases de JDBC para ejecutar una consulta?

  • A) Conectar → Validar → Ejecutar → Mostrar → Cerrar
  • B) Abrir BD → Escribir SQL → Compilar → Correr → Leer
  • C) Importar driver → Conectar → Consultar → Parsear → Desconectar
  • D) Definir SQL → Establecer conexión → Crear PreparedStatement → Ejecutar → Leer ResultSet
Ver respuesta

✅ D) Definir SQL → Establecer conexión → Crear PreparedStatement → Ejecutar → Leer ResultSet

💡 Las 5 fases: 1) String SQL con ? de placeholder, 2) Conexion.obtener(), 3) con.prepareStatement(sql) y ps.setXxx(1, valor), 4) executeQuery() o executeUpdate(), 5) while(rs.next()) para SELECTs.


Pregunta 3

¿Cuál es la diferencia entre PreparedStatement y Statement?

  • A) Statement es más seguro; PreparedStatement es más rápido pero peligroso
  • B) Statement es para SELECTs; PreparedStatement es para INSERTs
  • C) PreparedStatement usa parámetros (?) que previenen la inyección SQL y son más eficientes; Statement concatena strings directamente
  • D) No hay diferencia funcional, son sinónimos modernos
Ver respuesta

✅ C) PreparedStatement usa parámetros (?) que previenen la inyección SQL y son más eficientes; Statement concatena strings directamente

💡 Con Statement: "SELECT * FROM personas WHERE nombre='" + nombre + "'" — si nombre es "' OR 1=1 --", se hackea la BD. Con PreparedStatement, los parámetros se escapan automáticamente.


Pregunta 4

¿Cuándo se usa executeQuery() y cuándo executeUpdate()?

  • A) executeQuery() para operaciones lentas; executeUpdate() para operaciones rápidas
  • B) executeQuery() para SELECT (devuelve ResultSet); executeUpdate() para INSERT, UPDATE, DELETE (devuelve filas afectadas)
  • C) Ambos son equivalentes, se pueden usar indistintamente
  • D) executeQuery() para consultas simples; executeUpdate() para consultas con JOINs
Ver respuesta

✅ B) executeQuery() para SELECT (devuelve ResultSet); executeUpdate() para INSERT, UPDATE, DELETE (devuelve filas afectadas)

💡 executeQuery() retorna un ResultSet con los datos consultados. executeUpdate() retorna un int con el número de filas afectadas (útil para verificar si la operación tuvo efecto).


Pregunta 5

¿Qué hace rs.next() en el contexto de un ResultSet?

  • A) Avanza al siguiente registro del ResultSet y devuelve true si existe, false si no hay más filas
  • B) Ejecuta la siguiente consulta SQL en la cola
  • C) Cierra el ResultSet y libera la memoria
  • D) Devuelve el número total de filas en el ResultSet
Ver respuesta

✅ A) Avanza al siguiente registro del ResultSet y devuelve true si existe, false si no hay más filas

💡 El ResultSet comienza antes de la primera fila. rs.next() mueve el cursor a la siguiente fila. Se usa en while(rs.next()) para iterar todas las filas, o en if(rs.next()) para obtener un único registro.


Pregunta 6

¿Qué es la inyección SQL y cómo la previene PreparedStatement?

  • A) Es un tipo de error de compilación; PreparedStatement lo corrige automáticamente
  • B) Es un problema de rendimiento; PreparedStatement lo optimiza con caché
  • C) Es un ataque donde el usuario ingresa SQL malicioso en un campo de texto; PreparedStatement escapa los parámetros y los trata como datos, nunca como código SQL
  • D) Es un error de conexión a la BD; PreparedStatement reintenta la conexión automáticamente
Ver respuesta

✅ C) Es un ataque donde el usuario ingresa SQL malicioso en un campo de texto; PreparedStatement escapa los parámetros y los trata como datos, nunca como código SQL

💡 Si el nombre fuera '; DROP TABLE personas; --, con Statement borraría la tabla. Con PreparedStatement, ese texto se trata como un dato literal (el nombre de una persona), no como SQL ejecutable.


Pregunta 7

¿Cuáles son las 5 operaciones CRUD y sus equivalentes SQL?

  • A) Crear=SELECT, Leer=INSERT, Actualizar=UPDATE, Eliminar=DELETE, Buscar=FIND
  • B) New=CREATE TABLE, Read=SELECT, Edit=UPDATE, Kill=DELETE, Scan=EXPLAIN
  • C) Add=INSERT, Get=SELECT, Modify=ALTER, Remove=DROP, List=SHOW
  • D) Create=INSERT, Read=SELECT, Update=UPDATE, Delete=DELETE, (5ta: buscar por ID=SELECT WHERE)
Ver respuesta

✅ D) Create=INSERT, Read=SELECT, Update=UPDATE, Delete=DELETE, (5ta: buscar por ID=SELECT WHERE)

💡 CRUD son las 4 operaciones básicas de persistencia. En el mini-CRUD tenemos: agregar() (INSERT), getLista() (SELECT), actualizar() (UPDATE), eliminar() (DELETE), obtenerXCodigo() (SELECT WHERE).


Pregunta 8

¿Por qué las operaciones de modificación (INSERT/UPDATE/DELETE) no necesitan la fase 5 (leer ResultSet)?

  • A) Porque MySQL no devuelve datos en esas operaciones
  • B) Porque executeUpdate() retorna un int (filas afectadas), no un ResultSet con datos
  • C) Porque try-with-resources cierra el ResultSet antes de que se pueda leer
  • D) Porque solo se usa ResultSet con tablas que tienen más de 10 columnas
Ver respuesta

✅ B) Porque executeUpdate() retorna un int (filas afectadas), no un ResultSet con datos

💡 Un INSERT no "devuelve filas" para leer. Devuelve cuántas filas se insertaron (normalmente 1). Solo los SELECTs devuelven un ResultSet con datos para iterar con rs.next().


🏠 Volver al índice


← Volver a Clase PersonaDAO · 🏠 Inicio

⚠️ **GitHub.com Fallback** ⚠️