• No se han encontrado resultados

• En este modelo de acceso a las bases de datos, las instrucciones son enviadas a una capa intermedia entre

Cliente y Servidor, que es la que se encarga de enviar las sentencias SQL a la base de datos y recoger el resultado desde la base de datos, véase la figura. En este caso el usuario no tiene contacto directo, ni siquiera a través de la red, con la maquina donde reside la base de datos.

 ARQUITECTURA 3 CAPAS

Definición: Es un estilo de programación, su objetivo primordial es la separación de la capa de presentación, capa de negocio y la capa de datos.

 La ventaja principal: Es el desarrollo se puede llevar a cabo en varios niveles y, en caso de que

sobrevenga algún cambio.

 En el diseño de sistemas informáticos actuales se suele usar las arquitecturas multilineal o

Programación por capas.

 Además, permite distribuir el trabajo de creación de una aplicación por niveles; cada grupo de

trabajo está totalmente abstraído del resto de niveles, de forma que basta con conocer la A PI  que existe entre niveles.

 API (Application Programming Interface)

 Es el conjunto de funciones y procedimientos o métodos que ofrece cierta biblioteca para ser

utilizado por otro software como una capa de abstracción.

Ejemplos:

 API de Java

 Microsoft Framework .NET  API for SCSI device interfacing  Javascript-C de Mozilla

 Symfony para PHP

1.) Capa de presentación.-  Esta capa es la que ve el usuario , presenta el sistema al usuario, le comunica la información y captura la información del usuario en un mínimo de proceso.

 Esta capa se comunica únicamente con la capa de negocio. También es conocida como interfaz gráfica y

debe tener la característica de ser "amigable" para el usuario generalmente se presentan como formularios.

2.) Capa de negocio

 Aquí es donde, se reciben las peticiones del usuario y se envían las respuestas tras el proceso. Se denomina capa de negocio (e incluso de lógica del negocio) porque es aquí donde se establecen todas las reglas que deben cumplirse. Esta capa se comunica con la capa de presentación, para recibir las solicitudes y presentar los resultado s, y con la capa de datos, para solicitar al gestor de base de datos para almacenar o recuperar datos de él.

 Toda aplicación tiene código para implementar reglas de negocios.

Se puede seleccionar almacenar la lógica de negocios sobre cada estación de cliente, u optar por ejecutar la

lógica de negocios sobre un servidor de aplicaciones.

 No toda la lógica de negocio es la misma algunas no requieren un frecuente acceso a los datos, pero una

interface de usuario robusta necesitara de la lógica de negocios para la validación en la entrada de campos, cálculos en tiempo real u otras interacciones de usuarios.

3)Capa De Datos

 Es donde residen los datos y es la encargada de acceder a los mismos. Está formada por uno o más

gestores de bases de datos que realizan todo el almacenamiento de datos, reciben solicitudes de almacenamiento o recuperación de información desde la capa de negocio.

Dis eño de u na A pli cac ión Fi nal 

Aplicacion Practica

 A continuación se listarán algunos ejercicios prácticos de conexiones a Access y a SQL Server por medio de JDBC.

Observación: Para los ejemplos se hace uso de Oracle JDeveloper 10g.

Ejemplo con Access

1. Cree la base de datos de Access con el nombre “dbdata”, en ella cree una tabla de prueba denominada “persona”, esta tabla tendrá como campos a DNI, Nombre y Edad. Guarde esta base datos en “C:\ jdbc”.

2. En JDeveloper cree una aplicación nueva con el nombre “AccessJDBC”.

3. Luego de creada la aplicación, se le pedirá la creación del p royecto, al cual denominará “Project1”.

4. Haga clic derecho sobre el proyecto, seleccione “Properties”, luego en la ventana seleccione “Run/Debug”, haga clic en “Edit”, seleccione “Tool Settings” y habilite la entrada de información por parte del usuario:

5.  Agregue una clase ejecutable al proyecto y denomínela “jdbc_conexion_access” tal como se muestra en la siguiente imagen:

6. En la clase haga un import a java.sql.* y al java.util.*. Luego escriba el siguiente código:

package project1;

import java.sql.*;

import java.util.*;

public class jdbc_conexion_access {

public static void main(String[] args) {

Scanner Leer=new Scanner(System.in);

String nombre,DNI,consult=new String();

int edad;

consult="";

try {

/*** Registro de driver y conexión a base de datos ****/

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

Connection con = DriverManager.getConnection( "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=C:/jdbc/dbdata.mdb", "", "");

/**Creando el Statement**/

Statement sentencia = con.createStatement();

while((consult.equals("S")||consult.equals("N"))==false){

System.out.print("¿Desea ingresar datos? (S/N):");

consult=Leer.next(); } if(consult.equals("S")){ System.out.print("Ingrese DNI:"); DNI=Leer.next(); System.out.print("Ingrese nombre: "); nombre=Leer.next(); System.out.print("Ingrese EDAD:"); edad=Leer.nextInt();

/***** Ejecutar sentencia SQL para el ingreso de datos a la tabla ********/

sentencia.executeUpdate( "INSERT INTO persona (DNI, nombre,edad) VALUES ('" + DNI + "', '"+nombre+"',"+edad+")");

}

/***** Ver datos de la tabla ********/

System.out.println(" Tabla de personas");

System.out.println("DNI\tNombre\tEdad");

ResultSet rs = sentencia.executeQuery( "SELECT DNI, nombre,edad FROM persona" );

/*** Recorrer fila a fila el resultado ****/

while ( rs.next() ) {

String res =rs.getString("DNI") +"\t "+ rs.getString("nombre") + "\t" + rs.getInt("edad");

System.out.println( res );

}

sentencia.close();

con.close();

}

catch( ClassNotFoundException e ) { e.printStackTrace(); }

catch (SQLException e) { e.printStackTrace(); }

}

}

7. Ahora compile la clase y obtendrá algo similar a:

Ejemplos con SQL Server 2000

Para trabajar con SQL Server 2000 y Java, se debe realizar los siguientes pasos previos:

 Actualizar el servidor SQL Server 2000 al Service Pack 2 o posterior.  Descargar e instalar el driver para SQL Server 2000 SP2.

 Configurar del driver JDBC en JDeveloper.

Luego de estos pasos previos procederemos a crear las aplicaciones de prueba en JDeveloper de la siguiente manera:

a) Ejemplo para ver un catálogo de las bases de datos que tiene SQL Server.

1. Cree una aplicación denominada “ApplicationSQL” y denomine al proyecto “project1”.

2. Agregue la referencia al driver de SQL Server a la aplicación, para esto sólo haga clic derecho sobre el proyecto y en el menú contextual elija “Project properties”.

3. Luego seleccione “Libraries” en el panel izquierdo de la ventana de propiedades. En la misma ventana haga clic en el botón “Add Library…”. Lo anterior desplegará la ventana para añadir librerías.

4. En la ventana “Add Library…” haga clic en “New” y aparecerá la ventana para crear la librería en ella haga clic en “Add entry” y busque el driver de SQL 2000 para JDBC. El driver normalmente se ubica en “C:\Archivos de programa\Microsoft SQL Server 2000 Driver for JDBC\lib” y está compuesto por los archivos Msbase.jar, mssqlserver.jar y msutil.jar.

6. En el proyecto cree la clase ejecutable “SQLCatalog” con el siguiente contenido:

import java.*;

public class SQLCatalog {

private java.sql.Connection con = null;

private final String url = "jdbc:microsoft:sqlserver://";

private final String serverName= "localhost";

private final String portNumber = "1433";

private final String databaseName= "Northwind";

private final String userName = "sa";

private final String password = "";

private final String selectMethod = "cursor";

//Indica al controlador que debe utilizar un cursor de servidor

// lo que permite más de una instrucción activa en una conexión.

private String getConnectionUrl(){

return url+serverName+":"+portNumber+";databaseName="+databaseName+";" + "selectMethod="+selectMethod+";";

}

private java.sql.Connection getConnection(){

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); con = java.sql.DriverManager.getConnection(getConnectionUrl(),userName,password); if(con!=null) System.out.println("Conexión correcta."); } catch(Exception e){ e.printStackTrace();

System.out.println("Error de seguimiento en getConnection() : " + e.getMessage());

}

return con;

}

/* Mostrar las propiedades del controlador y los detalles de la base de datos */

public void displayDbProperties(){

 java.sql.DatabaseMetaData dm = null;  java.sql.ResultSet rs = null; try{ con= this.getConnection(); if(con!=null){ dm = con.getMetaData();

System.out.println("Información del controlador");

System.out.println(" Nombre del controlador: "+ dm.getDriverName());

System.out.println(" Versión del controlador: "+ dm.getDriverVersion ());

System.out.println(" Información de la base de datos ");

System.out.println(" Versión de la base de datos: "+ dm.getDatabaseProductVersion());

System.out.println("Catálogos disponibles ");

rs = dm.getCatalogs();

while(rs.next()){

System.out.println(" catálogo: "+ rs.getString(1));

}

rs.close();

rs = null;

closeConnection();

}

else System.out.println("Error: No hay ninguna conexión activa");

} catch(Exception e){ e.printStackTrace(); } dm=null; }

private void closeConnection(){

try{ if(con!=null) con.close(); con=null; } catch(Exception e){ e.printStackTrace(); } }

public static void main(String[] args) throws Exception {

SQLCatalog myDbTest = new SQLCatalog();

myDbTest.displayDbProperties();

}

}

7. Compile la clase y obtendrá algo similar a lo siguiente:

b) Ejemplo con interfaz gráfica SWING para ver los clientes de Northwind.

1. En JDeveloper, cree una aplicación denominada “SQLClientesNorth” y denomine al proyecto “project1”.

2. Al igual que la aplicación anterior, en la ventana de propiedades del proyecto agregue una referencia al driver para SQL Server 2000.

3. Haga clic derecho sobre el proyecto y en la ventana “New gallery” seleccione y expanda “Client tier” y seleccione “SWING/AWT”. En el panel izquierdo seleccione “Java application”, aparecerán las siguientes ventanas:

4.

4. Ahora Ahora en en el el frame frame creado, creado, diseñe diseñe la la siguiente siguiente interfaz:interfaz:

5.

5. La propiedad text La propiedad text de los botones es la misma de los botones es la misma que la actionCommanque la actionCommand y el JTable tiene ld y el JTable tiene la propiedada propiedad autoResizeMode en

autoResizeMode en AUTO_RESIZAUTO_RESIZE_OFF.E_OFF. 6.

6. Haga doble clic sobre el botón “filtro“y agregue la línea de códigoHaga doble clic sobre el botón “filtro“y agregue la línea de código import java.sql.*;import java.sql.*; y la líneay la línea importimport com.microsof

com.microsoft.jdbc.sqlt.jdbc.sqlserver.SQLServerDserver.SQLServerDriver;river; al comienzo del código. al comienzo del código. 7.

7. El El código decódigo del forl formulario mulario debe debe quedar quedar de la de la siguiente siguiente forma:forma:

import

import java.awt.Dimensionjava.awt.Dimension;;

import java.sql.*; import java.sql.*;

import

import java.awt.Rectangle;java.awt.Rectangle;

import

import

import java.awt.event.Ajava.awt.event.ActionListener;ctionListener;

import

import javax.swing.JButtjavax.swing.JButton;on;

import javax.swing.JFrame; import javax.swing.JFrame;

import

import javax.swing.JOptionPjavax.swing.JOptionPane;ane;

import javax.swing.JTable; import javax.swing.JTable;

import

import javax.swing.JTextjavax.swing.JTextField;Field;

import

import com.microsoft.jcom.microsoft.jdbc.sqlserver.SQLServerDriver;dbc.sqlserver.SQLServerDriver;

import

import javax.swing.JScrollPajavax.swing.JScrollPane;ne;

import

import javax.swing.table.javax.swing.table.DefaultTableMDefaultTableModel;odel;

import

import javax.swing.table.javax.swing.table.JTableHeader;JTableHeader;

public class ClientesNorth extends JFrame { public class ClientesNorth extends JFrame {

private JButton jButton1 = new JButton(); private JButton jButton1 = new JButton();

private JButton jButton2 = new JButton(); private JButton jButton2 = new JButton();

private JButton jButton3 = new JButton(); private JButton jButton3 = new JButton();

DefaultTableModel modelo = new DefaultTableModel(); DefaultTableModel modelo = new DefaultTableModel();

private JTextField jTextField1 = new JTextField(); private JTextField jTextField1 = new JTextField();

private JTable jTable1 = new JTable(); private JTable jTable1 = new JTable();

JScrollPane jScrollPane1 = new J

JScrollPane jScrollPane1 = new JScrollPane(jTable1);ScrollPane(jTable1);

private JScrollPane jScrollPane2 = new JScrollPane(); private JScrollPane jScrollPane2 = new JScrollPane();

public ClientesNorth() { public ClientesNorth() { try { try {  jbInit();  jbInit(); } catch (Exception e) { } catch (Exception e) { e.printStackTrace(); e.printStackTrace(); }} }}

private void jbInit() throws Exception { private void jbInit() throws Exception {

this.getContentPa

this.getContentPane().setLayout( null ne().setLayout( null ););

this.setSize(new Dimension(603, 416)); this.setSize(new Dimension(603, 416));

 jButton1.setT

 jButton1.setText("Filtro");ext("Filtro");

 jButton1.setBoun

 jButton1.setBounds(new Rectangle(30, 285, ds(new Rectangle(30, 285, 120, 25));120, 25));

 jButton1.setActio

 jButton1.setActionCommand("Filtro"nCommand("Filtro"););

 jButton1.addActio

 jButton1.addActionListener(new ActionLinListener(new ActionListener() {stener() {

public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {

 jButton1_action  jButton1_actionPerformed(e);Performed(e); }} }); });  jButton2.setTex  jButton2.setText("Limpiar");t("Limpiar");  jButton2.setBound

 jButton2.setBounds(new Rectangle(445, 285, s(new Rectangle(445, 285, 115, 25));115, 25));

 jButton2.addActio

 jButton2.addActionListener(new ActionLinListener(new ActionListener() {stener() {

public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {

 jButton2_actionP  jButton2_actionPerformed(e);erformed(e); }} }); });  jButton3.setTex  jButton3.setText("Salir");t("Salir");  jButton3.setBound

 jButton3.setBounds(new Rectangle(445, 340, s(new Rectangle(445, 340, 110, 25));110, 25));

 jButton3.addActi

 jButton3.addActionListener(new ActionLonListener(new ActionListener() {istener() {

public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {

 jButton3_actionP  jButton3_actionPerformed(e);erformed(e); }} }); });  jTextField1.setB

 jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);  jScrollPane2.getViewport().add(jTable1, null); this.getContentPane().add(jScrollPane2, null); this.getContentPane().add(jTextField1, null); this.getContentPane().add(jButton3, null); this.getContentPane().add(jButton2, null); this.getContentPane().add(jButton1, null);  jTable1.setCellSelectionEnabled(true); //nombres a comlumnas  jTable1.setTableHeader(new JTableHeader(jTable1.getColumnModel()));  jTable1.setPreferredScrollableViewportSize(new Dimension(100, 200));  jTable1.setAutoscrolls(false);  jScrollPane2.setBounds(new Rectangle(25, 15, 545, 250)); }

private void llenadata()

{ try{ DriverManager.registerDriver(new SQLServerDriver()); Connection conexion = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;SelectMethod=cursor;User=sa;Passwor  d=;DatabaseName=Northwind");

CallableStatement stmt = conexion.prepareCall("{call sp_javapruebanorthwind (?)}");

stmt.setString(1, this.jTextField1.getText());

ResultSet rs =stmt.executeQuery();

int numeroColumnas=0;

// Se obtiene el número de columnas.

numeroColumnas = metaDatos.getColumnCount();

for(int ass=0 ;ass<numeroColumnas;ass++){

//añadir columnas al modelo

modelo.addColumn(metaDatos.getColumnName(ass+1));

}

Object [] fila = new Object[numeroColumnas];

// Bucle para cada resultado en la consulta

while (rs.next())

{

// Se obtiene cada una de las etiquetas para cada columna

// Se rellena cada posición del array con una de las columnas de la tabla en base de datos.

for (int i=0;i<numeroColumnas;i++)

fila[i] = rs.getObject(i+1); // El primer índice en rs es el 1, no el cero, por eso se suma 1.

// Se añade al modelo la fila completa.

modelo.addRow(fila); }  jTable1.setModel(modelo); rs.close(); }catch(Exception y) { JOptionPane.showMessageDialog(this,y.getMessage()); } }

private void jButton1_actionPerformed(ActionEvent e) {

 jTable1.setPreferredScrollableViewportSize(new Dimension(500, 70));

//asegurarse que modelo es nulo

modelo.setRowCount(0) ;

modelo.setColumnCount(0);

llenadata();

}

private void jButton2_actionPerformed(ActionEvent e) {

//limpiar el modelo

modelo.setRowCount(0);

modelo.setColumnCount(0);

}

private void jButton3_actionPerformed(ActionEvent e) {

this.dispose();

}

}

8. Antes de compilar este aplicativo, debe crear un procedimiento almacenado en SQL Server denominado sp_javapruebanorthwind  con el siguiente contenido:

CREATE procedure sp_javapruebanorthwind

@companya varchar(40)

as

select * from customers where companyname like @companya + '%'

GO

9. Para ejecutar este ejemplo, haga clic derecho sobre “Application1.java” que se ubica dentro del proyecto de la aplicación “SQLClientesNorth” y sobre el menú contextual haga clic en “Run”. Obtendrá lo siguiente:

Puede aplicar un filtro a la consulta:

I. BIBIOGRAFÍA

A.

Balta, Víctor – Vásquez, Julio. Guia De Desarrollo En Java Para Aplicaciones Windows. PERU, Ed.  AC Editores. 170 pp.

B.

Deitel Deitel . Como Programar en Java -7ma Edicion

Documento similar