Java Database Connectivity (JDBC) es una interfaz de programación de aplicaciones (API) que define cómo un cliente puede acceder a una base de datos. Es una tecnología de acceso a datos utilizada para la conectividad de bases de datos Java. Proporciona métodos para consultar y actualizar datos en una base de datos y está orientado a bases de datos relacionales. JDBC ofrece una interfaz Java natural para trabajar con SQL . Se necesita JDBC para proporcionar una solución de «Java puro» para el desarrollo de aplicaciones. La API de JDBC utiliza controladores JDBC para conectarse con la base de datos.
Hay 4 tipos de controladores JDBC:
- Controlador de puente JDBC-ODBC
- Controlador API nativo (controlador parcialmente Java)
- Controlador de protocolo de red (controlador completamente Java)
- Thin Driver (controlador completamente Java)
Las ventajas de la API de JDBC son las siguientes:
- Crea automáticamente el formato XML de los datos de la base de datos.
- Admite consultas y procedimientos almacenados.
- Se puede acceder a casi cualquier base de datos para la que esté instalado el controlador ODBC .
Las desventajas de la API de JDBC son las siguientes:
- Escribir muchos códigos antes y después de ejecutar la consulta, como crear una conexión, crear una declaración, cerrar el conjunto de resultados, cerrar la conexión, etc.
- Escribir código de manejo de excepciones en la lógica de la base de datos.
- La repetición de estos códigos de una lógica de base de datos a otra requiere mucho tiempo.
Estos problemas de la API de JDBC se eliminan con Spring JDBC-Template . Proporciona métodos para escribir las consultas directamente, lo que ahorra mucho tiempo y esfuerzo.
Acceso a datos mediante plantilla JDBC
Hay una serie de opciones para seleccionar un enfoque para formar la base de su acceso a la base de datos JDBC . Spring Framework proporciona los siguientes enfoques para el acceso a la base de datos JDBC :
- Plantilla Jdbc
- NamedParameterJdbcTemplate
- PlantillaJdbcSimple
- SimpleJdbcInsert y SimpleJdbcCall
Plantilla JDBC
JdbcTemplate es una clase central en el paquete principal de JDBC que simplifica el uso de JDBC y ayuda a evitar errores comunes. Utiliza internamente la API de JDBC y elimina muchos problemas con la API de JDBC . Ejecuta consultas o actualizaciones de SQL, iniciando la iteración sobre ResultSets y capturando excepciones de JDBC y traduciéndolas al genérico. Ejecuta el flujo de trabajo central de JDBC , dejando el código de la aplicación para proporcionar SQL y extraer resultados. Maneja la excepción y proporciona los mensajes de excepción informativos con la ayuda de las clases de excepción definidas en el paquete org.springframework.dao .
Los métodos comunes de la clase spring JdbcTemplate.
Métodos | Descripción |
---|---|
actualización pública int (consulta de string) | Se utiliza para insertar, actualizar y eliminar registros. |
actualización pública int (consulta de string, objeto… argumentos) | Se usa para insertar, actualizar y eliminar registros usando PreparedStatement usando argumentos dados. |
ejecución T pública (String sql, acción PreparedStatementCallback) | Ejecuta la consulta mediante PreparedStatementCallback. |
ejecución de vacío público (consulta de string) | Se utiliza para ejecutar la consulta DDL . |
consulta T pública (String sql, resultado de ResultSetExtractor) | Se utiliza para obtener registros mediante ResultSetExtractor . |
Consultas de plantilla JDBC
Consulta básica para contar alumnos almacenados en la base de datos utilizando JdbcTemplate .
int result = jdbcTemplate.queryForObject( "SELECT COUNT(*) FROM STUDENT", Integer.class);
Y aquí hay un simple INSERTAR :
public int addStudent(int id) { return jdbcTemplate.update("INSERT INTO STUDENT VALUES (?, ?, ?)", id, "megan", "India"); }
La sintaxis estándar para proporcionar parámetros es usar el «?» personaje.
Implementación: Spring JdbcTemplate
Comenzamos con algunas configuraciones simples de la fuente de datos. Usaremos una base de datos MySQL
Ejemplo:
Java
/*package whatever //do not write package name here */ @Configuration @ComponentScan("com.exploit.jdbc") public class SpringJdbcConfig { @Bean public DataSource mysqlDataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName( "com.mysql.jdbc.Driver"); dataSource.setUrl( "jdbc:mysql://localhost:8800/springjdbc"); dataSource.setUsername("user"); dataSource.setPassword("password"); return dataSource; } }
A. Archivo: Student.java
Java
// Java Program to Illustrate Student Class package com.exploit.org; // Class public class Student { // Class data members private Integer age; private String name; private Integer id; // Constructor public Student() {} // Setters and Getters public void setAge(Integer age) { this.age = age; } public Integer getAge() { return age; } public void setName(String name) { this.name = name; } public String getName() { return name; } public void setId(Integer id) { this.id = id; } public Integer getId() { return id; } }
B. Archivo: StudentDAO.java
A continuación se muestra la implementación del archivo de interfaz del objeto de acceso a datos StudentDAO.java.
Ejemplo:
Java
// Java Program to Illustrate StudentDAO Class package com.exploit.org; // importing required classes import java.util.List; import javax.sql.DataSource; // Class public interface StudentDAO { // Used to initialize database resources // ie. connection public void setDataSource(DataSource ds); // Used to list down all the records // from the Student table public List<Student> listStudents(); }
C. Archivo: Dependencia de Maven
La dependencia se usa en el archivo pom.xml .
Ejemplo:
XML
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency>
D. Archivo: StudentJDBCTemplate.java
A continuación se muestra el archivo de clase de implementación StudentJDBCTemplate.java para la interfaz DAO definida StudentDAO.
Ejemplo:
Java
// Java Program Illustrating Implementation // of StudentDAO Class package com.exploit.org; // Importing required classes import java.util.List; import javax.sql.DataSource; import org.springframework.jdbc.core.JdbcTemplate; // Class // Implementing StudentDAO Class public class StudentJDBCTemp implements StudentDAO { // Class data members private DataSource dataSource; private JdbcTemplate jdbcTemplateObject; // Method 1 public void setDataSource(DataSource dataSource) { // This keyword refers to current instance itself this.dataSource = dataSource; this.jdbcTemplateObject = new JdbcTemplate(dataSource); } // Method 2 public List<Student> listStudents() { // Custom SQL query String SQL = "select * from Student"; List<Student> students = jdbcTemplateObject.query( SQL, new StudentMapper()); return students; } }