No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Java SE: SQL y Bases de Datos

Curso de Java SE: SQL y Bases de Datos

Ana Fernanda Gutierrez Villanueva

Ana Fernanda Gutierrez Villanueva

Leer y crear datos con JDBC

5/22
Recursos

¿Cómo realizar consultas SQL básicas con JDBC?

Conectar y manipular una base de datos mediante SQL es una habilidad invaluable para cualquier desarrollador. En esta clase abordaremos cómo realizar nuestras primeras consultas SQL utilizando JDBC, un puente entre la aplicación Java y la base de datos. Comenzaremos por establecer la conexión con la base de datos y luego procederemos a realizar consultas sencillas para leer y modificar datos.

¿Cómo establecer una conexión con la base de datos?

El primer paso en el manejo de bases de datos es establecer una conexión. Para esto, declararemos nuestras variables de tipo Connection, Statement, y ResultSet. Estas serán las herramientas principales para comunicarnos con la base de datos.

Connection myConn = null;
Statement myStmt = null;
ResultSet myRs = null;

Dentro de un bloque try, estableceremos la conexión y crearemos un objeto Statement que nos permitirá ejecutar consultas SQL. Este es el código necesario:

// Establecemos conexión
myConn = DriverManager.getConnection("url_de_la_bd", "usuario", "contraseña");

// Creamos el statement
myStmt = myConn.createStatement();
myRs = myStmt.executeQuery("SELECT firstName FROM employees");

// Procesamos los resultados
while (myRs.next()) {
    System.out.println("Nombre: " + myRs.getString("firstName"));
}

¿Cómo insertar datos en la base de datos usando PreparedStatement?

Además de leer datos, otra operación común es la inserción de nuevos registros. En lugar de utilizar un simple Statement, usaremos PreparedStatement para garantizar mayor seguridad y eficiencia.

  1. Declaración del PreparedStatement:

    Debemos cambiar el objeto Statement por PreparedStatement y preparar nuestra consulta SQL.

    PreparedStatement myPrepStmt = null;
    String sql = "INSERT INTO employees (firstName, lastName) VALUES (?, ?)";
    myPrepStmt = myConn.prepareStatement(sql);
    
  2. Asignación de valores a los parámetros:

    Una vez preparado, podemos establecer los valores que serán insertados en la tabla con setString.

    myPrepStmt.setString(1, "Johanna");
    myPrepStmt.setString(2, "Dorantes");
    
  3. Ejecución del insert:

    Finalmente, ejecutamos la inserción y verificamos el resultado:

    int rowsAffected = myPrepStmt.executeUpdate();
    if (rowsAffected > 0) {
        System.out.println("Se ha creado un nuevo empleado.");
    }
    

¿Cómo verificar las operaciones realizadas?

Para verificar nuestras operaciones, podemos utilizar herramientas como MySQL Workbench. Tras ejecutar nuestro código, abrimos la herramienta, realizamos un SELECT sobre la tabla, y comprobamos que los datos se han insertado correctamente:

SELECT * FROM employees;

En este ejemplo, verificamos que "Johanna Dorantes" haya sido añadida exitosamente a la tabla employees. Si todo está bien, la consulta reflejará los cambios realizados.

Consideraciones finales

El uso de JDBC para consultar y modificar una base de datos SQL es un aspecto esencial en el desarrollo de aplicaciones robustas. A través de cadena de conexión, declaración de objetos Statement y PreparedStatement, ejecutamos consultas y manipulamos datos con eficiencia. Al dominar estas primeras operaciones, está preparado para enfrentar desafíos más complejos en bases de datos. ¡Adelante, continúe explorando y mejorando sus habilidades!

Aportes 13

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

La base de datos de la profe donde la puedo conseguir para seguir los pasos que ella realiza?
\-- Se crea una base de datos llamada "project" si no existe. CREATE DATABASE IF not EXISTS project; \-- Se selecciona la base de datos "project" para utilizarla. USE project; \-- Si existe una tabla llamada "employees", se elimina. DROP TABLE IF EXISTS employees; \-- Se crea la tabla "employees" con las columnas id, first\_name, pa\_surname, ma\_surname, email y salary, y se establece id como clave primaria. CREATE TABLE `employees` ( `id` int(11) NOT NULL AUTO\_INCREMENT, `first\_name` varchar(64) DEFAULT NULL, `pa\_surname` varchar(64) DEFAULT NULL, `ma\_surname` varchar(64) DEFAULT NULL, `email` varchar(64) DEFAULT NULL, `salary` DECIMAL(10,2) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO\_INCREMENT=1 DEFAULT CHARSET=latin1; \-- Se insertan cinco filas en la tabla "employees" con diferentes valores para cada columna. INSERT INTO `employees` (`first\_name`, `pa\_surname`, `ma\_surname`, `email`, `salary`) VALUES ('John', 'Doe', 'Smith', '[email protected]', 50000.00); INSERT INTO `employees` (`first\_name`, `pa\_surname`, `ma\_surname`, `email`, `salary`) VALUES ('Jane', 'Smith', 'Johnson', '[email protected]', 60000.00); INSERT INTO `employees` (`first\_name`, `pa\_surname`, `ma\_surname`, `email`, `salary`) VALUES ('Michael', 'Johnson', 'Brown', '[email protected]', 55000.00); INSERT INTO `employees` (`first\_name`, `pa\_surname`, `ma\_surname`, `email`, `salary`) VALUES ('Emily', 'Brown', 'Davis', '[email protected]', 52000.00); INSERT INTO `employees` (`first\_name`, `pa\_surname`, `ma\_surname`, `email`, `salary`) VALUES ('David', 'Davis', 'Wilson', '[email protected]', 58000.00);

Resultado exitoso al actualizar un dato. Adicionalmente añadí en MySQL una nueva columna:

Y ya nadamas se pasan los valores dentro del Strign! que genial!

![](https://assets-global.website-files.com/5d38d9fb60cb4c6765e105aa/6361b6fb2da975d7843dba63_ahora-si.gif)
Creo que los pasos de la diapositiva correspondian al anterior codigo xq `Statement` y `ResultSet` no los usamos ya que no hicimos una consulta, en su lugar hicimos un INSERT y usamos `PreparedStatement`.
Este es un curso: EXCELENTE.
en la clase anterior encuentran el codigo de la tabla en los comentarios solo es que lo copien y lo ejecuten en su mql ya con eso pueden seguir a la profe
Yo creé mi propia base de datos, con las tablas. Y recorrí los datos de esta forma distinta. Connection conector; try{ conector= DriverManager.*getConnection*("jdbc:mysql://localhost:3306/supermercado","root","1234"); System.*out*.println("Conectados"); Statement st =conector.createStatement(); String query = "SELECT id\_Categoria, nombre, descripcion from categorias"; ResultSet resultados=st.executeQuery(query); while(resultados.next()){ System.*out*.print(resultados.getInt(1)); System.*out*.println("-"); System.*out*.println(resultados.getString("nombre")); System.*out*.println("-"); System.*out*.println(resultados.getString(3)); } }catch (SQLException e){ e.printStackTrace(); } Se puede leer tanto poniendo el numero en la posicion en la que se encuentra el dato, como poniendo su nombre.
ALGUINE TIENE ESTE ERROR ? java.sql.SQLException: Field 'id' doesn't have a default value at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:130) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:912) at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1054) at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1003) at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1312) at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:988) at Main.main(Main.java:26) MY CODIGO: `import java.sql.*;` `public class Main {` ` public static void main(String[] args) {` ` ` ` Connection myConn = null;` ` PreparedStatement myStamt = null;` ` ` ` try {` ` myConn = DriverManager.``getConnection``("jdbc:mysql://localhost:3306/lilproject", "root", "NicoliCaeli1@");` ` System.``out``.println("APOLO 13!"); ` ` String sql =("INSERT INTO employees (first_name, pa_surname) VALUES (?, ?)");` ` myStamt = myConn.prepareStatement(sql);` ` myStamt.setString(1, "Simona");` ` myStamt.setString(2, "Lamona");` ` int rowsAffected = myStamt.executeUpdate();` ` ` ` if (rowsAffected>0){` ` System.``out``.println("A new customer has been created");` ` }` ` } catch (SQLException e) {` ` e.printStackTrace();` ` System.``out``.println("queeeeee ya wei!!!");` ` }` ` }` `}`
Dando un pequeño aporte: Statment y PrepareStetement son similares en su trabajo, ambas sirven para hacer consultas a una base de datos. * La diferencia radica en que Statement debes usarla si solo vas a hacer una consulta después de instanciarla y PrepareStatement se usa para hacer consultas de forma dinámica. * **Statement** es una interfaz estatica, en otras palabras cada vez que la usas se debe compilar. * **PreparedStatement** es una interfaz utilizada para ejecutar una instrucción SQL precompilada, lo que puede llevar a un rendimiento más eficiente, especialmente cuando planeas ejecutar la misma consulta varias veces. * Si vas a ejecutar una misma consulta múltiples veces como insertar datos usa **PreparedStatement** y si solo deseas ejecutar una sola vez la consulta como ver los datos de un campo como los nombres usa **Statement**
Estoy utilizando mi propia bd en mysql 5.1.42, que me esta dando dolor de cabeza pero se esta saliendo jj
aquí las instrucciones para crear la base de datos : \-- Se crea una base de datos llamada "project" si no existe. CREATE DATABASE IF not EXISTS project; \-- Se selecciona la base de datos "project" para utilizarla. USE project; \-- Si existe una tabla llamada "employees", se elimina. DROP TABLE IF EXISTS employees; \-- Se crea la tabla "employees" con las columnas id, first\_name, pa\_surname, ma\_surname, email y salary, y se establece id como clave primaria. CREATE TABLE `employees` ( `id` int(11) NOT NULL AUTO\_INCREMENT, `first\_name` varchar(64) DEFAULT NULL, `pa\_surname` varchar(64) DEFAULT NULL, `ma\_surname` varchar(64) DEFAULT NULL, `email` varchar(64) DEFAULT NULL, `salary` DECIMAL(10,2) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO\_INCREMENT=1 DEFAULT CHARSET=latin1; \-- Se insertan cinco filas en la tabla "employees" con diferentes valores para cada columna. INSERT INTO `employees` (`first\_name`, `pa\_surname`, `ma\_surname`, `email`, `salary`) VALUES ('John', 'Doe', 'Smith', '[email protected]', 50000.00); INSERT INTO `employees` (`first\_name`, `pa\_surname`, `ma\_surname`, `email`, `salary`) VALUES ('Jane', 'Smith', 'Johnson', '[email protected]', 60000.00); INSERT INTO `employees` (`first\_name`, `pa\_surname`, `ma\_surname`, `email`, `salary`) VALUES ('Michael', 'Johnson', 'Brown', '[email protected]', 55000.00); INSERT INTO `employees` (`first\_name`, `pa\_surname`, `ma\_surname`, `email`, `salary`) VALUES ('Emily', 'Brown', 'Davis', '[email protected]', 52000.00); INSERT INTO `employees` (`first\_name`, `pa\_surname`, `ma\_surname`, `email`, `salary`) VALUES ('David', 'Davis', 'Wilson', '[email protected]', 58000.00);