auto dao - eliizquierdo/material_programacion_avanzada2026 GitHub Wiki
Responde cada pregunta antes de ver la respuesta.
¿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.
¿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.
¿Cuál es la diferencia entre PreparedStatement y Statement?
- A)
Statementes más seguro;PreparedStatementes más rápido pero peligroso - B)
Statementes para SELECTs;PreparedStatementes para INSERTs - C)
PreparedStatementusa parámetros (?) que previenen la inyección SQL y son más eficientes;Statementconcatena 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.
¿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).
¿Qué hace rs.next() en el contexto de un ResultSet?
- A) Avanza al siguiente registro del ResultSet y devuelve
truesi existe,falsesi 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.
¿Qué es la inyección SQL y cómo la previene PreparedStatement?
- A) Es un tipo de error de compilación;
PreparedStatementlo corrige automáticamente - B) Es un problema de rendimiento;
PreparedStatementlo optimiza con caché - C) Es un ataque donde el usuario ingresa SQL malicioso en un campo de texto;
PreparedStatementescapa los parámetros y los trata como datos, nunca como código SQL - D) Es un error de conexión a la BD;
PreparedStatementreintenta 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.
¿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).
¿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 unint(filas afectadas), no unResultSetcon datos - C) Porque
try-with-resourcescierra 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().
