Académique Documents
Professionnel Documents
Culture Documents
UNIDADES DE LA MATERIA
1. Asistencia obligatoria a clases de acuerdo con el reglamento que rige al alumno. 10% 2. Cumplir con los trabajos prcticos desarrollados en clase 10% 3. Ejercicios prcticos por unidad 40% 4. Examen por unidad 40%
MySql
Sql server
otros
3. ODBC es ms complicado de aprender, mezcla caractersticas sencillas con avanzadas y tiene opciones complejas incluso para las consultas ms sencillas.
4. JDBC es necesario para disponer de una solucin Java pura (100% pure Java). Cuando se utiliza ODBC el gestor de drivers y los drivers deben ser instalados manualmente en cada mquina cliente. Mientras que JDBC est escrito completamente en Java y su cdigo se instala automticamente.
Leccin : Introduccin 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 aplicacin 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 ejecucin de estas sentencias son devueltos al usuario. La base de datos puede estar en otra mquina a la que el usuario accede a travs de la red (Internet o Intranet). Esta es una arquitectura cliente/servidor, con la mquina del usuario como cliente y la mquina que contiene a la base de datos como servidor.
Leccin : Introduccin a JDBC (Conectividad de base de datos de Java) : Modelos de dos y tres capas
Aplicacin/Applet JDBC
CLIENTE
SGBD
SERVIDOR
Leccin : Introduccin a JDBC (Conectividad de base de datos de Java) : Modelos de dos y tres capas
CLIENTE Peticiones http
Applet
Aplicacin
JDBC
SGBD
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');
Leccin : Introduccin a JDBC (Conectividad de base de datos de Java) : Instalar Appserver e importar el script con
phpMyadmin
Leccin : Introduccin a JDBC (Conectividad de base de datos de Java) : Seleccionar la opcin Importar
Leccin : Introduccin a JDBC (Conectividad de base de datos de Java) : Seleccionar en Browse el archivo Books.sql y pulsar continuar
Leccin : Introduccin a JDBC (Conectividad de base de datos de Java) : Ver el resultado satisfactorio de la importacin
Leccin : Introduccin a JDBC (Conectividad de base de datos de Java) : Instalacin 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.zip puede ser en la siguiente pgina http://dev.mysql.com 2. Descomprimir el archivo. Todo el contenido queda en la siguiente carpeta c:\mysql-connector-java-5.0.4 3. Copiar los archivos siguientes Archivos ejecutables jar c:\mysql-connector-java-5.0.4\mysql-connector-java-5.0.4-bin.jar Y c:\mysql-connector-java-5.0.4\src\lib\aspectjrt.jar en el subdirectorio siguiente donde se instal java. Por ejemplo C:\Program Files\Java\jdk1.6.0\jre\lib\ext 4. Como ltimo paso En variables de entorno de windows (panel de control) agregar la siguiente variable del sistema nombre de la variable : CLASSPATH valor 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 programar Deitel Ed. Prentice hall/pearson
Leccin : Introduccin a JDBC (Conectividad de base de datos de Java) : Jerarqua de clases para acceso a datos
DriverManager Connection Statement
ResultSet
ResultSetMetaData // JDBC driver name and database URL static final String DRIVER = "com.mysql.jdbc.Driver"; static final String DATABASE_URL = "jdbc:mysql://localhost/books";
//declaracion de variables Connection connection = null; // manages connection Statement statement = null; // query statement ResultSet resultSet = null; // manages results ResultSetMetaData metaData =null;
//Mtodos invocados
connection=Drivermanager.getConnection(urldb,uid,pwd);
statement=connection.createStatement(); Resultset=statement.executeQuery(sql);
ResultSetMetaData metaData = resultSet.getMetaData();
Leccin : Introduccin a JDBC (Conectividad de base de datos de Java) : Jerarqua de clases para acceso a datos
Connection Statement ResultSet
ResulSetMetaData
statement = connection.createStatement();
resultSet = statement.executeQuery("SELECT authorID, firstName, lastName FROM authors" ); ResultSetMetaData metaData = resultSet.getMetaData(); int numberOfColumns = metaData.getColumnCount();
While(resultSet.next()){..}
resultSet.getObject(i)
Leccin : Introduccin a JDBC (Conectividad de base de datos de Java) : Codificacin 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
} }
Leccin : Introduccin a JDBC (Conectividad de base de datos de Java) : Codificacin 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); }
Leccin : Introduccin a JDBC (Conectividad de base de datos de Java) : Codificacin 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 automticas 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" );
Leccin : Introduccin a JDBC (Conectividad de base de datos de Java) : Codificacin 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 ) ; } }
Leccin : Introduccin 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 travs 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 conexin con el servidor de Mysql //en el puerto 80 Socket sock=new Socket(servidor,puerto); //se obtiene la direccin IP de la mquina 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 direccin "+dirIP; }
Leccin : Introduccin 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 travs de Internet
catch(Exception e){ //se captura cualquier excepcin que se produzca mensaje1="Se produjo la excepcin " + e; mensaje2="mientras se abra 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); } }
Leccin : Introduccin 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 conexin con el servidor de mysql //en el puerto 80 Socket sock=new Socket(servidor,puerto); //se obtiene la direccin IP de la mquina 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 direccin "+dirIP; }
Una applet es un fichero de clase que se escribe especficamente para visualizar grficos en la red Internet
Ejemplo de socket para obtener la direccin IP de un servidor usando el applet graphics para mostrar los mensajes
Leccin : Introduccin 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 excepcin que se produzca mensaje1="Se produjo la excepcin " + e; mensaje2="mientras se abra 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 mtodo paint() del applet repaint(); } //muestra los mensajes correspondientes public void paint(Graphics graphics){ graphics.drawString(mensaje1,10,20); graphics.drawString(mensaje2,10,30); } }
Leccin : Introduccin a JDBC (Conectividad de base de datos de Java) : Conexin 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 clase String sURL; Connection conexion=null; Statement statement = null; ResultSet resultSet = null; public ConexionODBC(String url){ this.sURL=url; }
Leccin : Introduccin a JDBC (Conectividad de base de datos de Java) : Conexin 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 clase ConexionODBC aplicacion=new ConexionODBC("jdbc:odbc:bookssqlserver;UID=root;PWD=123"); try{ aplicacion.realizaConexion(); }catch(Exception ex){ System.out.println("Se han producido excepciones: "+ex); } }
Leccin : Introduccin a JDBC (Conectividad de base de datos de Java) : Conexin 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 Java Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // conectamos a la base de datos conexion=DriverManager.getConnection(sURL); System.out.println("Se ha establecido la conexin 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();
Leccin : Introduccin a JDBC (Conectividad de base de datos de Java) : Conexin 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 conexin con: "+sURL); } }
Leccin : Introduccin a JDBC (Conectividad de base de datos de Java) : Jerarqua de clases para acceso a datos (insert)
connection statement resultSet
metaData
statement = connection.createStatement (ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); resultSet = statement.executeUpdate(INSERT INTO authors (authorID, firstName, lastName) VALUES (25,JULIO,DEHESA)" );
ResultSetMetaData metaData = resultSet.getMetaData(); int numberOfColumns = metaData.getColumnCount();
While(resultSet.next()){..}
resultSet.getObject(i)
Ejemplo 1 : Introduccin a JDBC (Conectividad de base de datos de Java) : Codificacin escritura de datos (netbeans).
escuela.sql
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 )
Ejemplo1 : Introduccin a JDBC (Conectividad de base de datos de Java) : Codificacin 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";
Ejemplo1 : Introduccin a JDBC (Conectividad de base de datos de Java) : Codificacin 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.CONCU R_UPDATABLE);
Ejemplo 1 : Introduccin a JDBC (Conectividad de base de datos de Java) : Codificacin escritura de datos (netbeans).
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();
1. Agregar un nuevo proyecto, seleccionando la categora Java Web y el proyecto Web Application.
en
el
cuerpo
del
documento
</body>
</body>
PRACTICA3: Realizar una consulta general sobre la tabla authors, base de datos mysql: books
<%@page import="java.sql.*"%> <html> <head><title>Conexin</title></head> <body> <%try{ //Se registra el driver jdbc para mysql Class.forName("com.mysql.jdbc.Driver"); //Driver driver=new com.inet.tds.TdsDriver(); //Realizacin de la conexin Connection conexion=DriverManager.getConnection("jdbc:mysql://localhost/books","root", "123"); out.println("Conexin 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(); }
PRACTICA3: Realizar una consulta general sobre la tabla authors, base de datos mysql: books
catch(SQLException ex){ //Se captura la excepcin de tipo SQLException que se produzca%> <%="Se produjo una excepcin durante la conexin:"+ex%> <%} catch(Exception ex){ //Se captura cualquier tipo de excepcin que se produzca%> <%="Se produjo una excepcin: "+ex%> <%}%> </body> </html>