UNIVERSIDADPOLITECNICAAMAZONICA
ESCUELAPROFESIONALDEINGENIERIADESISTEMAS
CURSO : DESARROLLODESOFTWAREI
CICLO : V
DOCENTE : MARCOPORROCHULLI
INTEGRANTES :
 INGRIDLESLY CORONELACUÑA
 CRISHIANSERGIOKAYAPYAGKIKAT
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());

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 TRESCAPAS · 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ÓNBD 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.
  • 6.
  • 7.
    Una vez agregadala 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 yotras 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 independientede 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 APLICACIONESJAVA 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 jarcon 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 conla 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 Unavez 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ésde 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 primerejemplo 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; importjava.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 { // Driverpara 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); // Siel 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());