SlideShare una empresa de Scribd logo
UNIVERSIDADPOLITECNICAAMAZONICA
ESCUELAPROFESIONALDEINGENIERIADESISTEMAS
CURSO : DESARROLLODESOFTWAREI
CICLO : V
DOCENTE : MARCOPORROCHULLI
INTEGRANTES :
 INGRIDLESLY CORONELACUÑA
 CRISHIANSERGIOKAYAPYAGKIKAT
JDBC
CAPADE ACCESODE DATOS, CREACIÓN
· MODELODE DOS CAPAS
En este modelo la aplicación JAVA o el Applet, se conectan
directamente con la BD” (16). Esto significa que el driver JDBC
específico para conectarse con la BD estará instalado en el sistema
local. La BD puede estar en otra máquina y se accede a ella mediante
red. Esta configuración también se llama Cliente/Servidor. El programa
cliente envía instrucciones SQL a la BD, y esta las procesa y envía los
resultados de vuelta al usuario.
MODELO DE TRES CAPAS
· En este modelo, las instrucciones son enviadas a una capa intermedia
que se encarga de enviar las sentencias SQL a la BD.El manejador de BD
procesa las sentencias y retorna los resultados a la capa intermedia que se
encarga de enviarlos al usuario.
Como último paso, no debemos olvidar arrancar el servidor de Base de
Datos, si utilizamos un gestor que incluye uno, como sucede con Interbase.
CONFIGURACIÓN DE CONEXIÓN BD CON NETBEANS
Para realizar la conexión a base de datos desde java necesitamos hacer uso de JDBC. Las bases de
datos que deseemos conectar deberán proveernos el driver JDBC en un empaquetado JAR para
añadirlo a las librerías del proyecto.
Deberemos conseguir la librería de acuerdo a la versión de la Base de Datos al cual deseemos
conectarnos. Es posible que su IDE reconozca la existencia del driver si la base de datos ha sido
instalada en el mismo ordenador junto con sus librerías, solo haría falta añadirlo a la lista de librerías
que se usarán en el proyecto, por ejemplo en NetBeans se podría ir al directorio Libraries del
Proyecto, hacer clic derecho sobre él y elegir Add Library y en la lista podría encontrase la que
necesitemos, o si queremos agregarla manualmente Add JAR/Folder y seleccionar desde la dirección
donde lo tenemos almacenado.
Add Library:
Add JAR/Folder:
Una vez agregada la librería, vamos a realizar el código de conexión, el cual nos
debe presentar una clase con 2 métodos que a mi parecer no deberían faltar.
Debería existir una función (Las funciones retornan datos) que nos retorne un
CachedRowSet que es algo similar al ResultSet que no podemos retornar mientras
el Statement esté sin cerrar, pero es obvio que por seguridad deberemos tener todas
las conexiones cerradas, por eso no retornamos directamente el ResultSet y hacerlo
sin cerrar las conexiones sería de muy mala práctica.
DEFINICIÓN DE JDBC. TIPOS. APLICACIONES
¿Qué es JDBC?
JDBC es usado para enviar comandos SQL hacia una base de datos relacional, que puede ser Oracle, Infomix, SyBase, etc.
¿Qué hace JDBC?
Establece una conexión con una BD
Envía sentencias SQL
Procesa los resultados
Connection con = DriverManager.getConnection ( "jdbc:odbc:wombat", "login", "password");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");
while (rs.next()) { int x = rs.getInt("a"); String s = rs.getString("b"); float f = rs.getFloat("c"); }
JDBC es una API de bajo nivel para API´s de alto nivel
Una integración de SQL hacia Java, es decir que las sentencias SQL se puedan mezclar con Java, por ejemplo, que una
variable de Java pueda ser usada en una sentencia SQL para recibir o dar valores.
JDBCv/s ODBC y otras API´s
ODBC no es apropiado para usar directamente con Java por que usa una interfaz en
C.
Una traducción literal de la API ODBC en C, no es deseable. Por ejemplo Java no
tiene punteros y la ODBC hace gran uso de ellos.
ODBC es muy difícil de aprender, hace una mezcla de acciones simples y
avanzadas.
Una API como JDBC es necesario para poder desarrollar una solución “puramente de
Java”
CARACTERÍSTICAS
JDBC es independiente de la plataforma al estar escrito en Java. “JDBC es una API de bajo nivel ya que hace llamadas
SQL directas”(14), Sun desea que JDBC pueda ser llamado desde otra API de más alto nivel que pueda simplificar la labor
del programador, aunque la utilización de JDBC es sencilla y potente. Se tiene noticia de que ya existen diversos
proyectos en marcha que intentan crear estas APIs de alto nivel. Aquí el término API hace referencia a un conjunto de
clases e interfaces. Una forma de ver las
FUNCIONES
Básicamente el API JDBC hace posible la realización de las siguientes tareas:
• Establecer una conexión con una base de datos.
• Enviar sentencias SQL.
• Manipular los datos.
• Procesar los resultados de la ejecución de las sentencias.
USODE JDBCEN APLICACIONES JAVA
JDBC (Java Database Connectivity) es un API de Java que nos permite conectarnos con bases
de datos y realizar operaciones sobre ellas utilizando instrucciones SQL desde una aplicación
Java. Con JDBC tenemos una interfaz para conectarnos con una base de datos sin tener que
preocuparnos de si es una base de datos MySQl, Oracle, SQLServer o cualquier otro tipo de
base de datos. El único cambio que habría que hacer para cambiar el tipo de base de datos de
una aplicación sería cambiar el driver específico de la base de datos en cuestión.
Para usar JDBC hay que seguir los siguientes pasos:
Incluir el jar con el Driver de la base de datos
El primer paso es obtener el driver de la base de datos que vamos a utilizar,
buscamos en google “MySQL jdbc driver”, “Oracle jdbc driver” o el que
queramos y descargamos el jar y lo incluimos es nuestro proyecto. Para este
ejemplo voy a usar MySQL, puedes descargarlo desde aquí, lo que queremos
es el .jar por lo que tienes que elegir Plataform Independent y descargar el zip
o el tar.gz, y aunque vienen unos cuantos archivos y carpetas el único que nos
interesa es mysql-connector-java-5.1.26-bin.jar que lo tenemos que añadir a
nuestro proyecto.
CARGAREL DRIVER
1
2
3
4
5
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException ex) {
log.error("No se encontro el Driver MySQL para JDBC.");
Ya tenemos el jar con el driver, pero hay que cargarlo para que se pueda hacer uso de el
en nuestra aplicación. En nuestro caso como vamos a usar MySQL la instrucción es la
siguiente y como puede lanzar una excepción pues se mete dentro de un try-catch.
Estableceruna conexión con la base de datos
El siguiente paso es establecer una conexión con la base de datos. Hay dos opciones para
obtener una conexión la primera es crear una nueva conexión con la base de datos que será la
que veremos en este ejemplo y la otra es obtener la conexión de un pool de conexiones creado
previamente que es una opción más eficiente porque no hace falta estar abriendo y cerrando
conexiones continuamente ya que simplemente se cogen las conexiones de pool cuando se
necesitan y se dejan en el pool cuando ya no se necesitan para que puedan volver a usarse.
En un artículo previo, como un pool de conexiones en Tomcat, puedes ver un ejemplo de
cómo usar un pool de conexiones con dicho servidor pero para un ejemplo de una aplicación
de escritorio como la que vamos a ver supuestamente vamos a tener pocas llamadas a base
de datos por lo que no se va a notar mucha diferencia.
REALIZAR UNA CONSULTA
Una vez obtenida la conexión ya podemos hacer consultas a la base de datos. Hay tres
métodos para ejecutar una consulta de tipo Statement que es una consulta normal,
PreparedStatement con la que se puede crear una consulta que se precompila en la base
de datos y como es de esperar se pueden establecer los distintos datos porque aunque la
estructura de la consulta será la misma lo lógico es que los datos de la consulta sean
distintos y finalmente están las CallableStatements que sirven para ejecutar procedimientos
almacenados.
CERRAR LA CONEXIÓN
Después de hacer las consultas que se necesite se debe de cerrar la conexión
para liberar los recursos, también se pueden cerrar el resulset y el statement de
forma manual, pero cerrando la conexión se cierran los otros dos porque están
creados a partir de la conexión, del mismo modo al cerrar el statement también
se liberan los recursos del resulset.
EJEMPLOS
En este primer ejemplo se crea la conexión y los prepareStatements en el constructor por lo que luego
podemos usarlo sin tener que crear una nueva conexión para insertar un nuevo dato, pero no cerramos
nunca la conexión porque si la cerrásemos como se está creando en el constructor ya no se podría volver a
usar.
Este primer ejemplo consiste en una aplicación que permite almacenar una nueva cuenta en la base de
datos siempre y cuando el código de la cuenta no esté ya en la base de datos. En este ejemplo se usan
PreparedStatements.
Una de las cosas que podemos ver en el ejemplo y que siempre se deben de hacer es declarar la conexión,
los statements y los resultsets fuera de los bloques try catch, porque puede pasar que como en este ejemplo
la conexión se cree en un sitio y luego se use en otro (lo normal sería tener una clase específica para crear
la conexión con la base de datos) y aunque no fuese así lo normal es cerrar la conexión en un bloque finally
porque aunque en este no cerramos la conexión lo normal y recomendable es hacerlo, sin ir más lejos en los
siguientes ejemplos si se cierra la conexión en el finally porque la conexión hay que cerrarla tanto si la
ejecución ha sido correcta como si se produce alguna excepción.
package ejemplo1;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
import javax.swing.JLabel;
import org.apache.log4j.Logger;
@author Ivan Salas Corrales <http://programandoointentandolo.com/>
public class CreaCuenta implements ActionListener {
private Logger log = Logger.getLogger(CreaCuenta.class);
private Ventana v;
private Connection cn;
private PreparedStatement pstBuscarCodigo;
private PreparedStatement pstInsertarCuenta;
public CreaCuenta(Ventana v) {
this.v = v;
try {
try {
// Driver para conectar con MySQL
Class.forName("com.mysql.jdbc.Driver");
// Conexion con la base de datos cn
= DriverManager.getConnection("jdbc:mysql://localhost:3306/cuentas", "root", "");
String sqlBusqueda = "SELECT codigo FROM cuentas WHERE codigo=?";
pstBuscarCodigo = cn.prepareStatement(sqlBusqueda);
String sqlNuevaCuenta = "INSERT INTO cuentas VALUES (?,?,?,?)";
pstInsertarCuenta = cn.prepareStatement(sqlNuevaCuenta);
} catch (SQLException ex) {
log.error("Error " + ex.getErrorCode() + ": " + ex.getMessage());
} catch (ClassNotFoundException ex) {
log.error("No se encontro el Driver MySQL para JDBC."); } }
@Override
public void actionPerformed(ActionEvent e) {
String codigo = v.getTextCodigo().getText();
String nombre = v.getTextNombre().getText();
String email = v.getTextEmail().getText();
double saldo = (double) v.getTextSaldo().getValue();
JLabel lbMensaje = v.getLbMensaje();
try {
pstBuscarCodigo.setString(1, codigo);
// Si el codigo no esta en la bd se añade la cuenta
ResultSet rs = pstBuscarCodigo.executeQuery();
if (!rs.next()) {
pstInsertarCuenta.setString(1, codigo);
pstInsertarCuenta.setString(2, nombre);
pstInsertarCuenta.setString(3, email);
pstInsertarCuenta.setDouble(4, saldo);
pstInsertarCuenta.executeUpdate();
lbMensaje.setText("Cuenta agregada correctamente");
} else {
lbMensaje.setText("El codigo indicado ya esta en la base de datos"); }
} catch (SQLException ex) {
log.error("Error " + ex.getErrorCode() + ": " + ex.getMessage());

Más contenido relacionado

PDF
Jsp servlet- Tutorial BD Conexión
PDF
Guia BD conexión Mysql con Java usando Netbeans
PDF
Programacion web java
PPTX
Java con base de datos
PPT
Servlets y jsp
ODP
Curso Jsp
PPSX
ConexióN A Base De Datos En Netbeans
Jsp servlet- Tutorial BD Conexión
Guia BD conexión Mysql con Java usando Netbeans
Programacion web java
Java con base de datos
Servlets y jsp
Curso Jsp
ConexióN A Base De Datos En Netbeans

La actualidad más candente (18)

PDF
Aplicación de escritorio con java
DOCX
Manual Netbeans Bases Datos2
PPT
Bases Datos en java
PPT
Java y Bases Datos
PDF
3. Curso Java JDBC (Bases de datos) - Curso 2005-2006
PDF
Conexion mysql con java usando netbeans
PPTX
PPTX
Reportes
PDF
Bbdd en java
PDF
Bases de Datos en Java - Intro a JDBC
PDF
2. Java Servlets (J2EE) - Curso 2005-2006
PPTX
Conexión de Base de Datos
PDF
Bases de datos con java
DOC
Manejo conexbd
ODT
DOCX
Bases de datos mysql y repotes usando jasper report
Aplicación de escritorio con java
Manual Netbeans Bases Datos2
Bases Datos en java
Java y Bases Datos
3. Curso Java JDBC (Bases de datos) - Curso 2005-2006
Conexion mysql con java usando netbeans
Reportes
Bbdd en java
Bases de Datos en Java - Intro a JDBC
2. Java Servlets (J2EE) - Curso 2005-2006
Conexión de Base de Datos
Bases de datos con java
Manejo conexbd
Bases de datos mysql y repotes usando jasper report
Publicidad

Destacado (16)

PPTX
armenia quindio
PDF
47663537 edgar-morin-el-paradigma-perdido
PPSX
Biomoleculas organicas-introduccion
PDF
Growth hacking
PPTX
Ventiladores_Luis_Cardozo
PDF
Mercedes benz atego
PDF
Mercedes benz atego
PDF
Summary
DOCX
PPTX
Tecnologías de la información
PPT
Practica de aula
PDF
Oracle workflow: use and administration.
PPTX
Laplace transform: UNIT STEP FUNCTION, SECOND SHIFTING THEOREM, DIRAC DELTA F...
armenia quindio
47663537 edgar-morin-el-paradigma-perdido
Biomoleculas organicas-introduccion
Growth hacking
Ventiladores_Luis_Cardozo
Mercedes benz atego
Mercedes benz atego
Summary
Tecnologías de la información
Practica de aula
Oracle workflow: use and administration.
Laplace transform: UNIT STEP FUNCTION, SECOND SHIFTING THEOREM, DIRAC DELTA F...
Publicidad

Similar a JDBC (20)

DOC
Manejo conexbd
PPTX
Java con base de datos
PPTX
JAVA DATABASE CONNECTIVITY (JDBC)
PPTX
PPTX
PPTX
PPTX
Java con Base de Datos
PPTX
Java con base de datos
PPTX
PPTX
Java con base de datos
PDF
[ES] Conectividad de java a base de datos(jdbc)
PDF
POOABD (POO Aplicada a B Datos) - API JDBC parte 2 -2020
PPTX
Trabajo desarrollo de soft.
PDF
POOABD (POO Aplicada a B Datos) - API JDBC - Parte 2
PPTX
Java DataBase Connectivity
PPTX
Java con base de datos
PPTX
Jdbc(JAVA DATABASE CONNECTIVITY)
PDF
Acceso a datos con JDBC.pdf
PPT
Java y Bases de Datos
Manejo conexbd
Java con base de datos
JAVA DATABASE CONNECTIVITY (JDBC)
Java con Base de Datos
Java con base de datos
Java con base de datos
[ES] Conectividad de java a base de datos(jdbc)
POOABD (POO Aplicada a B Datos) - API JDBC parte 2 -2020
Trabajo desarrollo de soft.
POOABD (POO Aplicada a B Datos) - API JDBC - Parte 2
Java DataBase Connectivity
Java con base de datos
Jdbc(JAVA DATABASE CONNECTIVITY)
Acceso a datos con JDBC.pdf
Java y Bases de Datos

Más de INGRID LESLY CORONEL ACUÑA (20)

PPTX
INTELIGENCIA EMPRESARIAL
PPTX
PPTX
ADMINISTRACIÓN DE LA SEGURIDAD EN SQL SERVER
PPTX
TRIGGERS-ACTIVADORES
PPTX
TRIGGER-ACTIVADORES
PPTX
Procedimientos almacenados
PPTX
PPTX
Lenguaje transact sql
PPTX
Objeto connection
PPTX
PROGRAMACIÓN ORIENTADA A OBJETOS
PPTX
CONTROL JTABLE CON BASE DE DATOS
INTELIGENCIA EMPRESARIAL
ADMINISTRACIÓN DE LA SEGURIDAD EN SQL SERVER
TRIGGERS-ACTIVADORES
TRIGGER-ACTIVADORES
Procedimientos almacenados
Lenguaje transact sql
Objeto connection
PROGRAMACIÓN ORIENTADA A OBJETOS
CONTROL JTABLE CON BASE DE DATOS

Último (20)

PDF
SUBDIVISIÓN URBANA PUEDE ENFRENTAR SERVIDUMBRE DE PASO.pdf
PPTX
clase MICROCONTROLADORES ago-dic 2019.pptx
PDF
Sugerencias Didacticas 2023_Diseño de Estructuras Metalicas_digital.pdf
PPTX
Notificacion e investigación de incidentes y accidentes de trabajo.pptx
PPTX
Manual ISO9001_2015_IATF_16949_2016.pptx
PPTX
Gestion de seguridad y salud ocupacional.pptx
PDF
Estrategias de apoyo de tecnología 2do periodo pdf
PDF
CALIDAD SSOMA AMBIENTE PRL UNIVERSIDADDD
DOCX
Cumplimiento normativo y realidad laboral
PDF
Primera formulación de cargos de la SEC en contra del CEN
PDF
5 Presentación de PowerPointGENERACIÓN DESECHOS UIS 18-02-2023 (1).pdf
PPT
Sustancias Peligrosas de empresas para su correcto manejo
PDF
Informe Comision Investigadora Final distribución electrica años 2024 y 2025
PDF
1132-2018 espectrofotometro uv visible.pdf
PPTX
MODULO 1.SEGURIDAD Y SALUD CONCEPTOS GENERALES.pptx
DOCX
CONCEPTOS BASICOS DE LA PROGRAMACION STEP
PPTX
Presentación - Taller interpretación iso 9001-Solutions consulting learning.pptx
PPTX
GEOLOGIA, principios , fundamentos y conceptos
PDF
Oficio SEC de formulación de cargos por el apagón del 25F en contra del CEN
PDF
Sustitucion_del_maiz_por_harina_integral_de_zapall.pdf
SUBDIVISIÓN URBANA PUEDE ENFRENTAR SERVIDUMBRE DE PASO.pdf
clase MICROCONTROLADORES ago-dic 2019.pptx
Sugerencias Didacticas 2023_Diseño de Estructuras Metalicas_digital.pdf
Notificacion e investigación de incidentes y accidentes de trabajo.pptx
Manual ISO9001_2015_IATF_16949_2016.pptx
Gestion de seguridad y salud ocupacional.pptx
Estrategias de apoyo de tecnología 2do periodo pdf
CALIDAD SSOMA AMBIENTE PRL UNIVERSIDADDD
Cumplimiento normativo y realidad laboral
Primera formulación de cargos de la SEC en contra del CEN
5 Presentación de PowerPointGENERACIÓN DESECHOS UIS 18-02-2023 (1).pdf
Sustancias Peligrosas de empresas para su correcto manejo
Informe Comision Investigadora Final distribución electrica años 2024 y 2025
1132-2018 espectrofotometro uv visible.pdf
MODULO 1.SEGURIDAD Y SALUD CONCEPTOS GENERALES.pptx
CONCEPTOS BASICOS DE LA PROGRAMACION STEP
Presentación - Taller interpretación iso 9001-Solutions consulting learning.pptx
GEOLOGIA, principios , fundamentos y conceptos
Oficio SEC de formulación de cargos por el apagón del 25F en contra del CEN
Sustitucion_del_maiz_por_harina_integral_de_zapall.pdf

JDBC

  • 1. UNIVERSIDADPOLITECNICAAMAZONICA ESCUELAPROFESIONALDEINGENIERIADESISTEMAS CURSO : DESARROLLODESOFTWAREI CICLO : V DOCENTE : MARCOPORROCHULLI INTEGRANTES :  INGRIDLESLY CORONELACUÑA  CRISHIANSERGIOKAYAPYAGKIKAT
  • 3. CAPADE ACCESODE DATOS, CREACIÓN · MODELODE DOS CAPAS En este modelo la aplicación JAVA o el Applet, se conectan directamente con la BD” (16). Esto significa que el driver JDBC específico para conectarse con la BD estará instalado en el sistema local. La BD puede estar en otra máquina y se accede a ella mediante red. Esta configuración también se llama Cliente/Servidor. El programa cliente envía instrucciones SQL a la BD, y esta las procesa y envía los resultados de vuelta al usuario.
  • 4. MODELO DE TRES CAPAS · En este modelo, las instrucciones son enviadas a una capa intermedia que se encarga de enviar las sentencias SQL a la BD.El manejador de BD procesa las sentencias y retorna los resultados a la capa intermedia que se encarga de enviarlos al usuario. Como último paso, no debemos olvidar arrancar el servidor de Base de Datos, si utilizamos un gestor que incluye uno, como sucede con Interbase.
  • 5. CONFIGURACIÓN DE CONEXIÓN BD CON NETBEANS Para realizar la conexión a base de datos desde java necesitamos hacer uso de JDBC. Las bases de datos que deseemos conectar deberán proveernos el driver JDBC en un empaquetado JAR para añadirlo a las librerías del proyecto. Deberemos conseguir la librería de acuerdo a la versión de la Base de Datos al cual deseemos conectarnos. Es posible que su IDE reconozca la existencia del driver si la base de datos ha sido instalada en el mismo ordenador junto con sus librerías, solo haría falta añadirlo a la lista de librerías que se usarán en el proyecto, por ejemplo en NetBeans se podría ir al directorio Libraries del Proyecto, hacer clic derecho sobre él y elegir Add Library y en la lista podría encontrase la que necesitemos, o si queremos agregarla manualmente Add JAR/Folder y seleccionar desde la dirección donde lo tenemos almacenado.
  • 7. Una vez agregada la librería, vamos a realizar el código de conexión, el cual nos debe presentar una clase con 2 métodos que a mi parecer no deberían faltar. Debería existir una función (Las funciones retornan datos) que nos retorne un CachedRowSet que es algo similar al ResultSet que no podemos retornar mientras el Statement esté sin cerrar, pero es obvio que por seguridad deberemos tener todas las conexiones cerradas, por eso no retornamos directamente el ResultSet y hacerlo sin cerrar las conexiones sería de muy mala práctica.
  • 8. DEFINICIÓN DE JDBC. TIPOS. APLICACIONES ¿Qué es JDBC? JDBC es usado para enviar comandos SQL hacia una base de datos relacional, que puede ser Oracle, Infomix, SyBase, etc. ¿Qué hace JDBC? Establece una conexión con una BD Envía sentencias SQL Procesa los resultados Connection con = DriverManager.getConnection ( "jdbc:odbc:wombat", "login", "password"); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1"); while (rs.next()) { int x = rs.getInt("a"); String s = rs.getString("b"); float f = rs.getFloat("c"); } JDBC es una API de bajo nivel para API´s de alto nivel Una integración de SQL hacia Java, es decir que las sentencias SQL se puedan mezclar con Java, por ejemplo, que una variable de Java pueda ser usada en una sentencia SQL para recibir o dar valores.
  • 9. JDBCv/s ODBC y otras API´s ODBC no es apropiado para usar directamente con Java por que usa una interfaz en C. Una traducción literal de la API ODBC en C, no es deseable. Por ejemplo Java no tiene punteros y la ODBC hace gran uso de ellos. ODBC es muy difícil de aprender, hace una mezcla de acciones simples y avanzadas. Una API como JDBC es necesario para poder desarrollar una solución “puramente de Java”
  • 10. CARACTERÍSTICAS JDBC es independiente de la plataforma al estar escrito en Java. “JDBC es una API de bajo nivel ya que hace llamadas SQL directas”(14), Sun desea que JDBC pueda ser llamado desde otra API de más alto nivel que pueda simplificar la labor del programador, aunque la utilización de JDBC es sencilla y potente. Se tiene noticia de que ya existen diversos proyectos en marcha que intentan crear estas APIs de alto nivel. Aquí el término API hace referencia a un conjunto de clases e interfaces. Una forma de ver las FUNCIONES Básicamente el API JDBC hace posible la realización de las siguientes tareas: • Establecer una conexión con una base de datos. • Enviar sentencias SQL. • Manipular los datos. • Procesar los resultados de la ejecución de las sentencias.
  • 11. USODE JDBCEN APLICACIONES JAVA JDBC (Java Database Connectivity) es un API de Java que nos permite conectarnos con bases de datos y realizar operaciones sobre ellas utilizando instrucciones SQL desde una aplicación Java. Con JDBC tenemos una interfaz para conectarnos con una base de datos sin tener que preocuparnos de si es una base de datos MySQl, Oracle, SQLServer o cualquier otro tipo de base de datos. El único cambio que habría que hacer para cambiar el tipo de base de datos de una aplicación sería cambiar el driver específico de la base de datos en cuestión. Para usar JDBC hay que seguir los siguientes pasos:
  • 12. Incluir el jar con el Driver de la base de datos El primer paso es obtener el driver de la base de datos que vamos a utilizar, buscamos en google “MySQL jdbc driver”, “Oracle jdbc driver” o el que queramos y descargamos el jar y lo incluimos es nuestro proyecto. Para este ejemplo voy a usar MySQL, puedes descargarlo desde aquí, lo que queremos es el .jar por lo que tienes que elegir Plataform Independent y descargar el zip o el tar.gz, y aunque vienen unos cuantos archivos y carpetas el único que nos interesa es mysql-connector-java-5.1.26-bin.jar que lo tenemos que añadir a nuestro proyecto.
  • 13. CARGAREL DRIVER 1 2 3 4 5 try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException ex) { log.error("No se encontro el Driver MySQL para JDBC."); Ya tenemos el jar con el driver, pero hay que cargarlo para que se pueda hacer uso de el en nuestra aplicación. En nuestro caso como vamos a usar MySQL la instrucción es la siguiente y como puede lanzar una excepción pues se mete dentro de un try-catch.
  • 14. Estableceruna conexión con la base de datos El siguiente paso es establecer una conexión con la base de datos. Hay dos opciones para obtener una conexión la primera es crear una nueva conexión con la base de datos que será la que veremos en este ejemplo y la otra es obtener la conexión de un pool de conexiones creado previamente que es una opción más eficiente porque no hace falta estar abriendo y cerrando conexiones continuamente ya que simplemente se cogen las conexiones de pool cuando se necesitan y se dejan en el pool cuando ya no se necesitan para que puedan volver a usarse. En un artículo previo, como un pool de conexiones en Tomcat, puedes ver un ejemplo de cómo usar un pool de conexiones con dicho servidor pero para un ejemplo de una aplicación de escritorio como la que vamos a ver supuestamente vamos a tener pocas llamadas a base de datos por lo que no se va a notar mucha diferencia.
  • 15. REALIZAR UNA CONSULTA Una vez obtenida la conexión ya podemos hacer consultas a la base de datos. Hay tres métodos para ejecutar una consulta de tipo Statement que es una consulta normal, PreparedStatement con la que se puede crear una consulta que se precompila en la base de datos y como es de esperar se pueden establecer los distintos datos porque aunque la estructura de la consulta será la misma lo lógico es que los datos de la consulta sean distintos y finalmente están las CallableStatements que sirven para ejecutar procedimientos almacenados.
  • 16. CERRAR LA CONEXIÓN Después de hacer las consultas que se necesite se debe de cerrar la conexión para liberar los recursos, también se pueden cerrar el resulset y el statement de forma manual, pero cerrando la conexión se cierran los otros dos porque están creados a partir de la conexión, del mismo modo al cerrar el statement también se liberan los recursos del resulset.
  • 17. EJEMPLOS En este primer ejemplo se crea la conexión y los prepareStatements en el constructor por lo que luego podemos usarlo sin tener que crear una nueva conexión para insertar un nuevo dato, pero no cerramos nunca la conexión porque si la cerrásemos como se está creando en el constructor ya no se podría volver a usar. Este primer ejemplo consiste en una aplicación que permite almacenar una nueva cuenta en la base de datos siempre y cuando el código de la cuenta no esté ya en la base de datos. En este ejemplo se usan PreparedStatements. Una de las cosas que podemos ver en el ejemplo y que siempre se deben de hacer es declarar la conexión, los statements y los resultsets fuera de los bloques try catch, porque puede pasar que como en este ejemplo la conexión se cree en un sitio y luego se use en otro (lo normal sería tener una clase específica para crear la conexión con la base de datos) y aunque no fuese así lo normal es cerrar la conexión en un bloque finally porque aunque en este no cerramos la conexión lo normal y recomendable es hacerlo, sin ir más lejos en los siguientes ejemplos si se cierra la conexión en el finally porque la conexión hay que cerrarla tanto si la ejecución ha sido correcta como si se produce alguna excepción.
  • 18. package ejemplo1; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.*; import javax.swing.JLabel; import org.apache.log4j.Logger; @author Ivan Salas Corrales <http://programandoointentandolo.com/> public class CreaCuenta implements ActionListener { private Logger log = Logger.getLogger(CreaCuenta.class); private Ventana v; private Connection cn; private PreparedStatement pstBuscarCodigo; private PreparedStatement pstInsertarCuenta; public CreaCuenta(Ventana v) { this.v = v; try {
  • 19. try { // Driver para conectar con MySQL Class.forName("com.mysql.jdbc.Driver"); // Conexion con la base de datos cn = DriverManager.getConnection("jdbc:mysql://localhost:3306/cuentas", "root", ""); String sqlBusqueda = "SELECT codigo FROM cuentas WHERE codigo=?"; pstBuscarCodigo = cn.prepareStatement(sqlBusqueda); String sqlNuevaCuenta = "INSERT INTO cuentas VALUES (?,?,?,?)"; pstInsertarCuenta = cn.prepareStatement(sqlNuevaCuenta); } catch (SQLException ex) { log.error("Error " + ex.getErrorCode() + ": " + ex.getMessage()); } catch (ClassNotFoundException ex) { log.error("No se encontro el Driver MySQL para JDBC."); } } @Override public void actionPerformed(ActionEvent e) { String codigo = v.getTextCodigo().getText(); String nombre = v.getTextNombre().getText(); String email = v.getTextEmail().getText(); double saldo = (double) v.getTextSaldo().getValue(); JLabel lbMensaje = v.getLbMensaje(); try {
  • 20. pstBuscarCodigo.setString(1, codigo); // Si el codigo no esta en la bd se añade la cuenta ResultSet rs = pstBuscarCodigo.executeQuery(); if (!rs.next()) { pstInsertarCuenta.setString(1, codigo); pstInsertarCuenta.setString(2, nombre); pstInsertarCuenta.setString(3, email); pstInsertarCuenta.setDouble(4, saldo); pstInsertarCuenta.executeUpdate(); lbMensaje.setText("Cuenta agregada correctamente"); } else { lbMensaje.setText("El codigo indicado ya esta en la base de datos"); } } catch (SQLException ex) { log.error("Error " + ex.getErrorCode() + ": " + ex.getMessage());