1.- Acceso a Base de Datos Java Cliente-servidor

52
CLIENTE SERVIDOR

Transcript of 1.- Acceso a Base de Datos Java Cliente-servidor

Page 1: 1.- Acceso a Base de Datos Java Cliente-servidor

CLIENTE SERVIDOR

Page 2: 1.- Acceso a Base de Datos Java Cliente-servidor

UNIDADES DE LA MATERIA

1. ACCESO A BASE DE DATOS CON JAVA

2. TRANSACCIONES EN BASE DE DATOS DISTRIBUIDAS

2. ACCESO A BASE DE DATOS CON TECNOLOGIA MOVIL

Page 3: 1.- Acceso a Base de Datos Java Cliente-servidor

CRITERIOS DE ACREDITACION Y EVALUACION

1. Asistencia obligatoria a clases de acuerdo con el reglamento que rige al alumno. 10%

2. Cumplir con los trabajos prácticos desarrollados en clase 10%

4. Examen por unidad 40%

3. Ejercicios prácticos por unidad 40%

Page 4: 1.- Acceso a Base de Datos Java Cliente-servidor

UNIDAD 1. ACCESO A BASE DE DATOS CON JAVA

MySql

Sql serve

r

otros

ACCESO A DATOS CON

JAVA

Page 5: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java)

JDBC es un API incluido dentro del lenguaje Java para el acceso a bases de datos. Consiste en un conjunto de clases e interfaces escritos en Java que ofrecen un completo API para la programación de bases de datos, por lo tanto es la una solución 100% Java que permite el acceso a bases de datos, la primera aparición de JDBC (JDBC 1.0) se encuentra dentro del paquete java.sql que ha fue incorporado en la versión del JDK 1.1.x (Java Development Kit) correspondiente a la versión 1.1 del lenguaje Java, JDBC 2.0 sigue estando en el mismo paquete pero en las versiones JDK 1.2 y JDK 1.3 que se corresponden con la versión 2 del lenguaje Java, o también denominada plataforma Java 2 (Java 2 Platform).

JDBC es independiente de la plataforma al estar escrito en Java.

Page 6: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java) :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.

Page 7: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java) :Características de JDBC

JDBC es una API de bajo nivel ya que hace llamadas SQL directas, 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 características de JDBC es enfrentarlo con otro API que permita también el acceso a bases de datos, uno de los más usados y extendidos es el API de Microsoft ODBC (Open DataBase Connectivity).

Page 8: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java) :Características de JDBCODBC permite la conexión a casi todo tipo de bases de datos en casi todas las plataformas, por lo tanto ¿porqué no podemos simplemente usar ODBC desde Java?. El hecho es que se puede utilizar ODBC desde Java, pero a través de JDBC con lo que se denomina el puente JDBC-ODBC (JDBCODBC Bridge, desarrollado por Sun e Intersolv). En este momento la pregunta se transforma en ¿para qué necesitamos entonces JDBC?, hay varias respuestas para esta pregunta:

1. Usar ODBC directamente desde Java no es apropiado ya que usa un interfaz en C, y las llamadas desde Java a código nativo de C pueden ocasionar diversos problemas de seguridad y en la portabilidad de las aplicaciones.

2. Una traducción literal del API de ODBC escrito en C no es adecuado, ya que, Java no utiliza punteros y sin embargo ODBC hace un uso bastante frecuente de ellos. Se puede considerar que JDBC es una traducción de ODBC a un interfaz de programación orientada a objetos que es natural para los programadores de Java.

Page 9: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java) :Características de JDBC

3. ODBC es más complicado de aprender, mezcla características sencillas con avanzadas y tiene opciones complejas incluso para las consultas más sencillas.

4. JDBC es necesario para disponer de una solución Java pura (100% pure Java). Cuando se utiliza ODBC el gestor de drivers y los drivers deben ser instalados manualmente en cada máquina cliente. Mientras que JDBC está escrito completamente en Java y su código se instala automáticamente.

Page 10: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java) : Modelos de dos y tres capas

JDBC permite los modelos de dos y tres capas para el acceso a bases de datos. En el modelo de dos capas (two-tier), una aplicación o un applet Java se comunica directamente con la base de datos. Requiere un driver JDBC que se pueda comunicar con el sistema gestor de bases de datos al que se accede.

Las sentencias SQL del usuario son enviadas a la base de datos, y los resultados de la ejecución de estas sentencias son devueltos al usuario. La base de datos puede estar en otra máquina a la que el usuario accede a través de la red (Internet o Intranet). Esta es una arquitectura cliente/servidor, con la máquina del usuario como cliente y la máquina que contiene a la base de datos como servidor.

Page 11: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java) : Modelos de dos y tres capas

Aplicación/Applet

JDBC

SGBD

CLIENTE

SERVIDOR

Protocolo del SGBD

Fig. Modelo de dos capas

Page 12: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java) : Modelos de dos y tres capas

Aplicación

JDBC

SGBD

CLIENTE

Servidor de la base de datos

Peticiones http

Fig. Modelo de tres capas

Applet

Servidor (lógica de negocio o capa intermedia)Protocolo propietario del SGBD

Page 13: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java) : Ejemplo de aplicación

Importar la base de datos Books.sql

Page 14: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java) : Ejemplo de aplicación

Crear el script de la base de datos Books.

DROP DATABASE IF EXISTS books;

CREATE DATABASE books;

USE books;

CREATE TABLE Authors( AuthorID int NOT NULL AUTO_INCREMENT PRIMARY KEY, FirstName varchar(30) NOT NULL, LastName varchar(30) NOT NULL);CREATE TABLE Titles( ISBN varchar(20) NOT NULL PRIMARY KEY, Title varchar(100) NOT NULL, EditionNumber int NOT NULL, Copyright varchar(4) NOT NULL);

CREATE TABLE AuthorISBN( AuthorID int NOT NULL, ISBN varchar(20) NOT NULL, FOREIGN KEY (AuthorID) REFERENCES Authors(AuthorID), FOREIGN KEY (ISBN) References Titles(ISBN));

Books.sql

Page 15: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java) : Ejemplo de aplicación

Continuación Books.sql

INSERT INTO Authors (FirstName,LastName) VALUES ('Harvey','Deitel');INSERT INTO Authors (FirstName,LastName) VALUES ('Paul','Deitel');INSERT INTO Authors (FirstName,LastName) VALUES ('Andrew','Goldberg');INSERT INTO Authors (FirstName,LastName) VALUES ('David','Choffnes');

INSERT INTO Titles (ISBN,Title,EditionNumber,Copyright) VALUES ('0131869000','Visual Basic 2005 How to Program',3,'2006');INSERT INTO AuthorISBN (AuthorID,ISBN) VALUES (1,'0131869000');INSERT INTO AuthorISBN (AuthorID,ISBN) VALUES (2,'0131869000');INSERT INTO Titles (ISBN,Title,EditionNumber,Copyright) VALUES ('0131525239','Visual C# 2005 How to Program',2,'2006');INSERT INTO AuthorISBN (AuthorID,ISBN) VALUES (1,'0131525239');INSERT INTO AuthorISBN (AuthorID,ISBN) VALUES (2,'0131525239');

INSERT INTO Titles (ISBN,Title,EditionNumber,Copyright) VALUES ('0132222205','Java How to Program',7,'2007');INSERT INTO AuthorISBN (AuthorID,ISBN) VALUES (1,'0132222205');INSERT INTO AuthorISBN (AuthorID,ISBN) VALUES (2,'0132222205');

INSERT INTO Titles (ISBN,Title,EditionNumber,Copyright) VALUES ('0131857576','C++ How to Program',5,'2005');INSERT INTO AuthorISBN (AuthorID,ISBN) VALUES (1,'0131857576');INSERT INTO AuthorISBN (AuthorID,ISBN) VALUES (2,'0131857576');

INSERT INTO Titles (ISBN,Title,EditionNumber,Copyright) VALUES ('0132404168','C How to Program',5,'2007');INSERT INTO AuthorISBN (AuthorID,ISBN) VALUES (1,'0132404168');INSERT INTO AuthorISBN (AuthorID,ISBN) VALUES (2,'0132404168');

Page 16: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java) : Ejemplo de aplicación

Continuación Books.sql

INSERT INTO Titles (ISBN,Title,EditionNumber,Copyright) VALUES ('0131450913','Internet & World Wide Web How to Program',3,'2004');INSERT INTO AuthorISBN (AuthorID,ISBN) VALUES (1,'0131450913');INSERT INTO AuthorISBN (AuthorID,ISBN) VALUES (2,'0131450913');INSERT INTO AuthorISBN (AuthorID,ISBN) VALUES (3,'0131450913');

INSERT INTO Titles (ISBN,Title,EditionNumber,Copyright) VALUES ('0131828274','Operating Systems',3,'2004');INSERT INTO AuthorISBN (AuthorID,ISBN) VALUES (1,'0131828274');INSERT INTO AuthorISBN (AuthorID,ISBN) VALUES (2,'0131828274');INSERT INTO AuthorISBN (AuthorID,ISBN) VALUES (4,'0131828274');

Page 17: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java) : Instalar Appserver e importar el script con phpMyadmin

Page 18: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java) : Seleccionar la opción Importar

Page 19: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java) : Seleccionar en Browse el archivo Books.sql y pulsar continuar

Page 20: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java) : Ver el resultado satisfactorio de la importación

Page 21: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java) : Instalación del conector de java para mysql. Instalar jdk1.6 y realizar los pasos

1. Descargar el conector de java para Mysql. El archivo mysql-connector-java-5.0.4.zippuede ser en la siguiente páginahttp://dev.mysql.com2. Descomprimir el archivo. Todo el contenido queda en la siguiente carpetac:\mysql-connector-java-5.0.4 3. Copiar los archivos siguientes Archivos ejecutables jarc:\mysql-connector-java-5.0.4\mysql-connector-java-5.0.4-bin.jarYc:\mysql-connector-java-5.0.4\src\lib\aspectjrt.jaren el subdirectorio siguiente donde se instaló java. Por ejemploC:\Program Files\Java\jdk1.6.0\jre\lib\ext4. Como último pasoEn variables de entorno de windows (panel de control) agregar la siguiente variable del sistemanombre de la variable : CLASSPATHvalor de la variable C:\Program Files\Java\jdk1.6.0\jre\lib\ext\mysql-connector-java-5.0.4-bin.jar;Listo

Para mayor referencia del ejemplo anexo. Consultar el libro

Java como programarDeitelEd. Prentice hall/pearson

Page 22: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java) : Jerarquía de clases para acceso a datos

Connection

Statement

ResultSet

Resu

ltS

etM

eta

Data

DriverManager

//declaracion de variables Connection connection = null; // manages connection Statement statement = null; // query statement ResultSet resultSet = null; // manages resultsResultSetMetaData metaData =null;

// JDBC driver name and database URL static final String DRIVER = "com.mysql.jdbc.Driver"; static final String DATABASE_URL = "jdbc:mysql://localhost/books";

//Métodos invocadosconnection=Drivermanager.getConnection(urldb,uid,pwd);statement=connection.createStatement();Resultset=statement.executeQuery(sql);ResultSetMetaData metaData = resultSet.getMetaData();

Page 23: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java) : Jerarquía de clases para acceso a datos

connection = DriverManager.getConnection( DATABASE_URL, "root", "123" );statement = connection.createStatement();

resultSet = statement.executeQuery("SELECT authorID, firstName, lastName FROM authors" );

Connection

StatementResultSet

ResultSetMetaData metaData = resultSet.getMetaData();Resu

lSetM

eta

Data

int numberOfColumns = metaData.getColumnCount();

While(resultSet.next()){..}

resultSet.getObject(i)

Page 24: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java) : Codificación lectura de datos (netbeans).

/* * To change this template, choose Tools | Templates * and open the template in the editor. */

package javaapplication7;// Displaying the contents of the authors table.

import java.sql.Connection;import java.sql.Statement;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;

/** * * @author dehecab */public class Main {

/** * @param args the command line arguments */ // JDBC driver name and database URL static final String DRIVER = "com.mysql.jdbc.Driver"; static final String DATABASE_URL = "jdbc:mysql://localhost/books";

public static void main(String[] args) { // TODO code application logic here Connection connection = null; // manages connection Statement statement = null; // query statement ResultSet resultSet = null; // manages results

Page 25: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java) : Codificación en netbeans.

// connect to database books and query database try { // load the driver class Class.forName( DRIVER );

// establish connection to database connection = DriverManager.getConnection( DATABASE_URL, "root", "123" ); //DriverManager.getConnection( DATABASE_URL, "jhtp7", "jhtp7" );

// create Statement for querying database statement = connection.createStatement();

// query database resultSet = statement.executeQuery("SELECT authorID, firstName, lastName FROM authors" );

// process query results ResultSetMetaData metaData = resultSet.getMetaData(); int numberOfColumns = metaData.getColumnCount(); System.out.println( "Authors Table of Books Database:\n" );

for ( int i = 1; i <= numberOfColumns; i++ ) System.out.printf( "%-8s\t", metaData.getColumnName(i)); System.out.println();

while ( resultSet.next() ) { for ( int i = 1; i <= numberOfColumns; i++ ) System.out.printf( "%-8s\t", resultSet.getObject( i ) ); System.out.println(); } // end while } // end try

Page 26: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java) : Codificación en netbeans.

catch ( SQLException sqlException ) { sqlException.printStackTrace(); } // end catch catch ( ClassNotFoundException classNotFound ) { classNotFound.printStackTrace(); } // end catch finally // ensure resultSet, statement and connection are closed { try { resultSet.close(); statement.close(); connection.close(); } // end try catch ( Exception exception ) { exception.printStackTrace(); } // end catch } // end finally

}

}

Page 27: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java) : Codificación en netbeans. modelo J2ME (ModelA)

/* * To change this template, choose Tools | Templates * and open the template in the editor. */

package moviljdbc;

/** * * @author Jdehesa */import java.sql.*;public class ModelA{ private Connection connection; private Statement statement; private ResultSet resultSet;

public ModelA () {

String url = "jdbc:mysql://localhost/books"; String userID = "root"; String password = "123"; try { Class.forName( "com.mysql.jdbc.Driver"); connection = DriverManager.getConnection(url,userID,password); } catch (ClassNotFoundException error) { System.err.println("Unable to load the JDBC/ODBC bridge." + error); System.exit(1); }

Page 28: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java) : Codificación en netbeans. modelo J2ME (ModelA)

catch (SQLException error) { System.err.println("Cannot connect to the database. "+ error); if(connection != null) { try { connection.close(); } catch(SQLException er){} } System.exit(2); } try { // insert example code here //desactivar transacciones automáticas if (connection.getAutoCommit() ) connection.setAutoCommit( false );

// create Statement for querying database statement = connection.createStatement();

// query database resultSet = statement.executeQuery("SELECT authorID, firstName, lastName FROM authors" );

// process query results ResultSetMetaData metaData = resultSet.getMetaData(); int numberOfColumns = metaData.getColumnCount(); System.out.println( "Authors Table of Books Database:\n" );

Page 29: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java) : Codificación en netbeans. modelo J2ME (ModelA)

for ( int i = 1; i <= numberOfColumns; i++ ) System.out.printf( "%-8s\t", metaData.getColumnName(i)); System.out.println();

while ( resultSet.next() ) { for ( int i = 1; i <= numberOfColumns; i++ ) System.out.printf( "%-8s\t", resultSet.getObject( i ) ); System.out.println(); } // end while connection.commit(); } catch ( SQLException error ) { System.err.println("SQL error." + error); if(connection != null) { try { connection.close(); } catch(SQLException er){} } System.exit(3); } if(connection != null) { try { connection.close(); } catch(SQLException er){} } } public static void main ( String args [] ) { final ModelA sql1 = new ModelA (); System.exit ( 0 ) ; }}

Page 30: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java) : import java.net.*; paquete que contiene todas las clases relacionadas con los sockets y comunicaciones a través de Internet

package javaapplication8;

import java.net.*;

public class ConexionSocket {

/** * @param args the command line arguments */ public static void main(String[] args) {

//nombre del servidor String servidor="localhost"; //puerto en el que escucha int puerto=80; String mensaje1=""; String mensaje2=""; try{ //se establece la conexión con el servidor de Mysql //en el puerto 80 Socket sock=new Socket(servidor,puerto); //se obtiene la dirección IP de la máquina a la que nos //hemos conectado String dirIP=sock.getInetAddress().toString(); //se cierra el socket sock.close(); mensaje1="Se abrió y cerró el socket sin problemas."; mensaje2="En la dirección "+dirIP; }

Ejemplo de socket para obtener la dirección IP de un servidor

Page 31: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java) : import java.net.*; paquete que contiene todas las clases relacionadas con los sockets y comunicaciones a través de Internet

catch(Exception e){ //se captura cualquier excepción que se produzca mensaje1="Se produjo la excepción " + e; mensaje2="mientras se abría el socket con el puerto "; mensaje2+=puerto+" en la URL "+servidor; } //Se muestra el resultado de la prueba System.out.println(mensaje1); System.out.println(mensaje2); }}

Page 32: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java) : import java.net.*; import java.applet.*; import java.awt.*; ejemplo de socket usando applet

package javaapplication11;import java.applet.*;import java.net.*;import java.awt.*;

public class ConexionSocket extends Applet{

/** * @param args the command line arguments */ //nombre del servidor String servidor="localhost"; //puerto en el que escucha int puerto=80; String mensaje1=""; String mensaje2=""; //public static void main(String[] args) { public void init(){ try{ //se establece la conexión con el servidor de mysql //en el puerto 80 Socket sock=new Socket(servidor,puerto); //se obtiene la dirección IP de la máquina a la que nos //hemos conectado String dirIP=sock.getInetAddress().toString(); //se cierra el socket sock.close(); mensaje1="Se abrió y cerró el socket sin problemas."; mensaje2="En la dirección "+dirIP; }

Ejemplo de socket para obtener la dirección IP de un servidor usando el applet graphics para mostrar los mensajes

Una applet es un fichero de clase que se escribe específicamente para visualizar gráficos en la red Internet

Page 33: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java) : import java.net.*; import java.applet.*; import java.awt.*; ejemplo de socket usando applet

catch(Exception e){ //se captura cualquier excepción que se produzca mensaje1="Se produjo la excepción " + e; mensaje2="mientras se abría el socket con el puerto "; mensaje2+=puerto+" en la URL "+servidor; } //Se muestra el resultado de la prueba //System.out.println(mensaje1); //System.out.println(mensaje2); //se llama al método paint() del applet repaint(); } //muestra los mensajes correspondientespublic void paint(Graphics graphics){graphics.drawString(mensaje1,10,20);graphics.drawString(mensaje2,10,30);}

}

Page 34: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java) : Conexión a una base de datos de sql server (200x) mediante el puente jdbc-odbc

/* * To change this template, choose Tools | Templates * and open the template in the editor. */

package conexionodbcsqlserver;import java.sql.*;/** * * @author JDEHESA */public class ConexionODBC {//Atributos de la claseString sURL;Connection conexion=null;Statement statement = null;ResultSet resultSet = null;

public ConexionODBC(String url){this.sURL=url;}

Page 35: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java) : Conexión a una base de datos de sql server (200x) mediante el puente jdbc-odbc

public static void main( String args[] ){//Creamos una instancia de la claseConexionODBC aplicacion=new ConexionODBC("jdbc:odbc:bookssqlserver;UID=root;PWD=123");try{aplicacion.realizaConexion();}catch(Exception ex){System.out.println("Se han producido excepciones: "+ex);}}

Page 36: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java) : Conexión a una base de datos de sql server (200x) mediante el puente jdbc-odbc

public void realizaConexion() throws Exception{//Carga del driver jdbc-odbc bridge que ofrece JavaClass.forName("sun.jdbc.odbc.JdbcOdbcDriver");// conectamos a la base de datosconexion=DriverManager.getConnection(sURL);System.out.println("Se ha establecido la conexión con: "+sURL);statement = conexion.createStatement(); //resultSet = statement.executeQuery("SELECT ISBN, Title, EditionNumber,Copyright FROM Titles" ); resultSet = statement.executeQuery("SELECT * FROM Authors" ); ResultSetMetaData metaData = resultSet.getMetaData(); int numberOfColumns = metaData.getColumnCount(); System.out.println( "Tabla Titles de la base de datos Books:\n" );

for ( int i = 1; i <= numberOfColumns; i++ ){ if(i==2) System.out.printf( "%-35s\t", metaData.getColumnName(i)); else System.out.printf( "%-8s\t", metaData.getColumnName(i));

} System.out.println();

Page 37: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java) : Conexión a una base de datos de sql server (200x) mediante el puente jdbc-odbc

while ( resultSet.next() ) { for ( int i = 1; i <= numberOfColumns; i++ ){ if(i==2) System.out.printf( "%-40s\t", resultSet.getObject( i ) ); else System.out.printf( "%-8s\t", resultSet.getObject( i ) );} System.out.println(); }

conexion.close();System.out.println("Se ha cerrado la conexión con: "+sURL);}}

Page 38: 1.- Acceso a Base de Datos Java Cliente-servidor

Lección : Introducción a JDBC (Conectividad de base de datos de Java) : Jerarquía de clases para acceso a datos (insert)

connection = DriverManager.getConnection( DATABASE_URL, "root", "123" );statement = connection.createStatement (ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);resultSet = statement.executeUpdate(“INSERT INTO authors (authorID, firstName, lastName) VALUES (25,’’JULIO,’DEHESA’)" );

connection

statementresultSet

ResultSetMetaData metaData = resultSet.getMetaData();metaData

int numberOfColumns = metaData.getColumnCount();

While(resultSet.next()){..}

resultSet.getObject(i)

Page 39: 1.- Acceso a Base de Datos Java Cliente-servidor

Ejemplo 1 : Introducción a JDBC (Conectividad de base de datos de Java) : Codificación escritura de datos (netbeans).

DROP DATABASE IF EXISTS Escuela;CREATE DATABASE Escuela;USE Escuela;CREATE TABLE Calificaciones( NControl int NOT NULL AUTO_INCREMENT, ClvMateria nvarchar(4) NOT NULL, PRIMARY KEY(NControl,ClvMAteria), Periodo nvarchar(20) NOT NULL, ClvGrupo nvarchar(2) NOT NULL, cu1 float NOT NULL, cu2 float NOT NULL, cu3 float NOT NULL, cu4 float NOT NULL, cu5 float NOT NULL)

escuela.sql

Page 40: 1.- Acceso a Base de Datos Java Cliente-servidor

Ejemplo1 : Introducción a JDBC (Conectividad de base de datos de Java) : Codificación escritura de datos (netbeans).

/* * To change this template, choose Tools | Templates * and open the template in the editor. */

package bdescuela;import java.sql.Connection;import java.sql.Statement;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import javax.swing.*;/** * * @author Jdehesa */public class Main {

static final String DRIVER = "com.mysql.jdbc.Driver"; static final String DATABASE_URL = "jdbc:mysql://localhost/escuela";

Page 41: 1.- Acceso a Base de Datos Java Cliente-servidor

Ejemplo1 : Introducción a JDBC (Conectividad de base de datos de Java) : Codificación escritura de datos (netbeans).

/** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here // TODO code application logic here Connection connection = null; // manages connection Statement statement = null; // query statement ResultSet resultSet = null; // manages results // connect to database books and query database try { // load the driver class Class.forName(DRIVER); // establish connection to database connection = DriverManager.getConnection( DATABASE_URL, "root", "123" ); //DriverManager.getConnection( DATABASE_URL, "jhtp7", "jhtp7" );

// create Statement for querying database statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

Page 42: 1.- Acceso a Base de Datos Java Cliente-servidor

int num = statement.executeUpdate("INSERT INTO calificaciones (NControl,ClvMateria,Periodo,ClvGrupo,cu1,cu2,cu3,cu4,cu5) VALUES(1,'PRM1','1ER SEMESTRE','1A',80,75,90,80,100)"); int num1 = statement.executeUpdate("INSERT INTO calificaciones (NControl,ClvMateria,Periodo,ClvGrupo,cu1,cu2,cu3,cu4,cu5) VALUES(1,'BDS1','1ER SEMESTRE','1A',70,95,97,84,88)"); int num2 = statement.executeUpdate("INSERT INTO calificaciones (NControl,ClvMateria,Periodo,ClvGrupo,cu1,cu2,cu3,cu4,cu5) VALUES(2,'PRM1','1ER SEMESTRE','1A',94,87,86,80,81)"); int num3 = statement.executeUpdate("INSERT INTO calificaciones (NControl,ClvMateria,Periodo,ClvGrupo,cu1,cu2,cu3,cu4,cu5) VALUES(2,'BDS1','1ER SEMESTRE','1A',80,83,91,92,88)"); // query database resultSet = statement.executeQuery("SELECT NControl,ClvMateria,Periodo,ClvGrupo,cu1,cu2,cu3,cu4,cu5 FROM calificaciones" );

// process query results ResultSetMetaData metaData = resultSet.getMetaData(); int numberOfColumns = metaData.getColumnCount(); System.out.println( "Tabla Calificaciones de la base de datos Escuela:\n" );

for ( int i = 1; i <= numberOfColumns; i++ ) System.out.printf( "%-8s\t", metaData.getColumnName(i)); System.out.println();

Ejemplo 1 : Introducción a JDBC (Conectividad de base de datos de Java) : Codificación escritura de datos (netbeans).

Page 43: 1.- Acceso a Base de Datos Java Cliente-servidor

while ( resultSet.next() ) { for ( int i = 1; i <= numberOfColumns; i++ ) System.out.printf( "%-8s\t", resultSet.getObject( i ) ); System.out.println(); } // end while } // end try catch ( SQLException sqlException ) { sqlException.printStackTrace(); } // end catch catch ( ClassNotFoundException classNotFound ) { classNotFound.printStackTrace(); } // end catch finally // ensure resultSet, statement and connection are closed { try { resultSet.close(); statement.close(); connection.close(); } // end try catch ( Exception exception ) { exception.printStackTrace(); } // end catch } // end finally }}

Ejemplo 1 : Cont. escritura de datos (netbeans).

Page 44: 1.- Acceso a Base de Datos Java Cliente-servidor

PRACTICA 1: CONEXIÓN A MYSQL DESDE JSP

Una aplicación web con tecnología de programación JSP puede ser creada desde netbeans. Realizar los pasos siguientes:1. Agregar un nuevo proyecto, seleccionando la categoría Java Web y el proyecto Web Application.

Page 45: 1.- Acceso a Base de Datos Java Cliente-servidor

PRACTICA1: CONEXIÓN A MYSQL DESDE JSP

2. Especificar el nombre del proyecto

Page 46: 1.- Acceso a Base de Datos Java Cliente-servidor

PRACTICA: CONEXIÓN A MYSQL DESDE JSP

3. Seleccionar el servidor web (GlassFish Server3 o Tomcat 6.0)

Page 47: 1.- Acceso a Base de Datos Java Cliente-servidor

PRACTICA1: CONEXIÓN A MYSQL DESDE JSP

Importar las librerías para el acceso a datos

<%@page import="java.sql.*"%>

Estructura básica de un documento HTML

<html><head><title>Conexión</title></head><body>..</body></html>

Page 48: 1.- Acceso a Base de Datos Java Cliente-servidor

PRACTICA1: CONEXIÓN A MYSQL DESDE JSP

Inserción de código en el cuerpo del documento <body>…</body>.

<body><% …codigo jsp .. %></body>

Visualización de mensajes en el browser para el control de errores

<body><%="Se produjo una excepción durante la conexión:"+ex%></body>Visualización de mensajes en el browser con librería conocida<body> out.println("Conexión realizada con éxito a: "+conexion.getCatalog());

</body>

Page 49: 1.- Acceso a Base de Datos Java Cliente-servidor

PRACTICA1: CONEXIÓN A MYSQL DESDE JSP

3. Realizar la codificación en el archivo index.jsp

<%@page import="java.sql.*"%><html><head><title>Conexión</title></head><body><% try{//Se registra el driverClass.forName("com.mysql.jdbc.Driver");//Driver driver=new com.inet.tds.TdsDriver();//Realización de la conexiónConnection conexion=DriverManager.getConnection("jdbc:mysql://localhost/books","root", "123");out.println("Conexión realizada con éxito a: "+conexion.getCatalog());conexion.close();}catch(SQLException ex){//Se captura la excepción de tipo SQLException que se produzca%><%="Se produjo una excepción durante la conexión:"+ex%><%}catch(Exception ex){//Se captura cualquier tipo de excepción que se produzca%><%="Se produjo una excepción: "+ex%><%}%></body></html>

Page 50: 1.- Acceso a Base de Datos Java Cliente-servidor

PRACTICA2: CONEXIÓN A SQL SERVER DESDE JSP

Realizar la codificación en el archivo index.jsp

<%@page import="java.sql.*"%><html><head><title>Conexión</title></head><body><% try{//Se registra el driverClass.forName("sun.jdbc.odbc.JdbcOdbcDriver");//Driver driver=new com.inet.tds.TdsDriver();//Realización de la conexiónConnection conexion=DriverManager.getConnection("jdbc:odbc:bookssqlserver;UID=root;PWD=123");out.println("Conexión realizada con éxito a: "+conexion.getCatalog());conexion.close();}catch(SQLException ex){//Se captura la excepción de tipo SQLException que se produzca%><%="Se produjo una excepción durante la conexión:"+ex%><%}catch(Exception ex){//Se captura cualquier tipo de excepción que se produzca%><%="Se produjo una excepción: "+ex%><%}%></body></html>

Page 51: 1.- Acceso a Base de Datos Java Cliente-servidor

PRACTICA3: Realizar una consulta general sobre la tabla authors, base de datos mysql: books

<%@page import="java.sql.*"%><html><head><title>Conexión</title></head><body><%try{

//Se registra el driver jdbc para mysql Class.forName("com.mysql.jdbc.Driver");//Driver driver=new com.inet.tds.TdsDriver();//Realización de la conexión Connection conexion=DriverManager.getConnection("jdbc:mysql://localhost/books","root", "123"); out.println("Conexión realizada con éxito a: "+conexion.getCatalog()); Statement statement = conexion.createStatement(); ResultSet resultSet = statement.executeQuery("SELECT authorID, firstName, lastName FROM authors" ); // process query results ResultSetMetaData metaData = resultSet.getMetaData(); int numberOfColumns = metaData.getColumnCount(); out.println( "Authors Table of Books Database:<br>" ); for ( int i = 1; i <= numberOfColumns; i++ ) out.print(metaData.getColumnName(i)+ " "); out.println("<br>"); while ( resultSet.next() ) { for ( int i = 1; i <= numberOfColumns; i++ ) out.print( resultSet.getObject( i )+ " " ); out.println("<br>"); } // end while conexion.close();}

Page 52: 1.- Acceso a Base de Datos Java Cliente-servidor

catch(SQLException ex){//Se captura la excepción de tipo SQLException que se produzca%><%="Se produjo una excepción durante la conexión:"+ex%><%}catch(Exception ex){//Se captura cualquier tipo de excepción que se produzca%><%="Se produjo una excepción: "+ex%><%}%></body></html>

PRACTICA3: Realizar una consulta general sobre la tabla authors, base de datos mysql: books