Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Cone Xi Ones Web
Cone Xi Ones Web
Geniz & Margen Software 2008. Todos los derechos reservados. Los logotipos y marcas utilizadas son marcas registradas de sus respectivas empresas.
Introduccin
El presente trabajo pretende dar a conocer los mtodos principales y mas utilizados dentro de las aplicaciones web, en este caso se dar una pequea pero muy practica introduccin a la conexin de las bases de datos con lenguajes web y tambin la forma de manipular cdigo SQL que nos permitir manipular a la base de datos desde una aplicacin web. En primer lugar empezaremos con uno de los lenguajes que han tenido mucho auge en los ltimos aos, que adems es una tecnologa de software libre y que utiliza como lo lenguaje de programacin a JAVA junto con todo su potencial, por supuesto nos referimos a los Servlets y paginas JSP. En este primer apartado aprender a conectar una base de datos de PostgreSQL 8.2 mediante Java DataBase Connectivity. Despus de haber logrado el primer ejercicio veremos como de manera anloga se conecta una base de datos del reconocido y mas famosos gestor de Base de Datos de Cdigo Abierto, denominado MySQL. Utilizaremos un script de PHP y las instrucciones principales que utiliza este tipo de lenguajes tambin Open Source. Para finalizar realizaremos una conexin entre software propietario utilizando la plataforma Microsoft.NET, en este ultimo apartado la conexin estar realizada por SQL Server y C#, mediante ADO.Net y aprenderos porque ASP.Net ha sido una de las tecnologas mas importantes y utilizadas desde hace ya tiempo atrs. Nota: Estos cdigos fueron compilados por IDEs, para la aplicacin de JAVA (Servlet y JSP) se utilizar Sun Java Studio Enterprise, para PHP utilizaremos NetBeans Early Access for PHP y para ASP.Net ser Microsoft Visual Web Developer.
Base de datos.
Antes de empezar a codificar directamente sobre alguno de los lenguajes antes mencionados, empezaremos por crear nuestras tres bases de datos en nuestros SGBD. Cada una de ellas ser creada por el DDL. Por el momento no se preocupe por las relaciones ni por otra cuestin de diseo, solo utilizaremos una tabla a manera de ejemplo y con una llave primaria tan solo para conservar la integridad. Si desea aprender SQL Avanzado le recomiendo leer mi manual titulado Aprendiendo SQL en N Diapositivas.
POSTGRESQL
create database diplomado; CREATE TABLE usuarios ( id serial NOT NULL PRIMARY KEY, nombre character varying(35), edad character varying(10), direccion character varying(35), correo character varying(35) ) WITHOUT OIDS; ALTER TABLE usuarios OWNER TO postgres;
MySQL
create database diplomado; use diplomado; create table usuarios( id int not null PRIMARY KEY auto_increment, nombre varchar(35), correo varchar(35), edad varchar(10), direccion varchar(35));
SQL Server
create database diplomado; use diplomado; create table usuarios( id int not null PRIMARY KEY identity(1,1), nombre varchar(35), correo varchar(35), edad varchar(10), direccion varchar(35));
Como podemos observar las tres bases de datos son casi iguales, la diferencia radica en el tipo de dato de la llave primaria que en todas ellas es un valor auto numrico, pero que se define de diferente manera para cada una de ellas.
/* Esta primera pgina llamada Index.jsp va a ser nuestra pagina inicial, ya que en toda aplicacin web siempre iniciara con un ndice(index), esta pagina al ser ejecutada solo mostrar texto plano y un link que nos vinculara a la siguiente pgina que realmente son las pginas que realizarn todo el trabajo. */
Index.jsp
/* Las siguientes lneas de cdigo son solo Comentarios generados por el IDE */ <%-Document : index Created on : 04-oct-2008, 13:56:21 Author : Geniz --%> /* Para iniciar, incluiremos directivas de pgina (<%@ %>)) que en este caso se encargarn de la codificacin de nuestra pagina JSP */ <%@page contentType="text/html" pageEncoding="UTF-8"%> /* <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
/* El cdigo restante es solo HTML estndar.*/
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Curriculum JSP</title> </head> <body background="Fondojsp.png"> <center><h1>Bienvenido a mi Curriculum en JAVA</h1> <h2> Autor:Geniz</h2></center> <br /><hr /> <h3>Detalles:<br /> Lenguaje de Programacion: JAVA<br> Base de Datos: PostgreSQL 8.2<br /> Servidor: GlassFish v2<br /> Puerto: 8080<br /> Path: http://localhost:8081/Curriculem_Servlet_JSP/index.jsp<br /></h3> <br><br> <center><a href="Nuevo.jsp">Continuar</a></center> </body> </html>
/* Conexiones.java es el archivo pilar de nuestra primera aplicacin, en el esta definida una clase de java llamada conexiones que contiene los mtodos principales para la conexin y manipulacin de la base de datos. */
Conexiones.java
/* * @author MSS */ /* Importamos las bibliotecas de java a utilizar, import javax.swing nos servir para el envo de mensajes, import java.sql es una librera especial que contiene los objetos para realizar la conexin y por ultimo importamos el nombre de nuestro Driver JDBC para postgresql. */ import javax.swing.*; import java.sql.*; import org.postgresql.Driver; /* Iniciamos la superclase, recuerde que debe ser nombrada con el mismo nombre que con el que guardar el archivo. */ public class Conexiones { /* En las siguientes tres lneas de cdigo definimos objetos, el primero es un objeto Connection el cual guardara nuestra ruta, nombre de usuario y contrasea de la base de datos, el objeto Statement ser el encargado de ejecutar las consultas mientras que ResultSet almacenar los datos que fueron solicitados por Statement. No olvide importar la librera SQL ya que estos objetos estn dentro de ella y de no importarla estos sern marcados como errores. */ static Connection conexion; static Statement sentencia; static ResultSet resultado; /* Iniciamos nuestro mtodo llamado conecta, que ser el encargado de establecer la conexin, controlados por un bloque try que nos avisara cuando la conexin se haya establecido o si algo ha fallado. */
public static void conecta(){ try { /* Cargamos el controlador jdbc de postgres a travs de class.forName, el controlador deber estar registrado en la classpath */ Class.forName( "org.postgresql.Driver" ); } catch( Exception e ) { // Avisamos que el puente no se ha podido cargar en caso de que esto suceda JOptionPane.showMessageDialog(null,"No se pudo cargar el puente JDBC-ODBC." ); return; }try{ /* Establecemos la conexin a travs de la clase DriverManager y de su propiedad getConnection, aqu debemos seguir el formato que nos establece el driver, en primer lugar pondremos la ruta especificando el puerto y el nombre de la BD, el 2 parmetro es el nombre de usuario y por ultimo la contrasea del mismo. Todos ellos debern ser datos de tipo cadena.*/ conexion=DriverManager.getConnection( "jdbc:postgresql://127.0.0.1:5432/diplomado", "postgres", " *********** " ); /* Una vez establecida la conexin invocaremos al mtodo createStatement de Connection, el cual nos devolver un objeto Statement. */ sentencia=conexion.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_ READ_ONLY ); /* En las siguientes lneas enviaremos mensajes para avisar que la conexin se estableci o en caso contrario mostraremos las posibles fallas, para ello el cdigo se encuentra en un bloque try. */ JOptionPane.showMessageDialog (null, "Conexin establecida"); } catch (Exception er){JOptionPane.showMessageDialog (null, "Error de conexion" ); } } /* Por ultimo construiremos un mtodo denominado alta al que pasaremos como parmetro una cadena de texto, utilizar la conexin activa y un objeto Statement para ejecutar consultas del tipo DML. En caso de utilizar DDL o DCL utilizaremos el mtodo executeUpdate de Statement. */ public static void alta(String cadena) { // Verificamos que haya conexin activa, en caso contrario se realizara una nueva conexin. if (conexion==null) { conecta(); } try{ // Ejecutamos la consulta recibida sentencia.execute(cadena); } catch(Exception er){
/* Atraparemos la excepcin lanzada por java en caso de que no se haya ejecutado la consulta y se la mostraremos al usuario. */ JOptionPane.showMessageDialog(null, "Lo sentimos su operacin solicitada no se pudo realizar debido a un error de "+er); } } }
/* El siguiente archivo ser el encargado de recoger los datos introducidos por el usuario, en el crearemos un objeto form que invocar al Servlet guardar a travs de una peticin POST de HTTP, aunque podramos tambin utilizar al mtodo GET de HTT P , en caso de no especificar ninguna accin al botn ejecutar un retorno de formulario. Aqu es importante recordar la propiedad name de los objetos ya que ser utilizado por el Servlet para almacenar los valores. Adems observaremos que todo el cdigo es solo HTML lo cual nos indica que nuestra pagina tambin puede ser creada con HTML y tener esta extensin por ejemplo: Nuevo.html */
Nuevo.jsp
<%-Document : Nuevo Created on : 04-oct-2008, 14:23:11 Author : Geniz --%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Nuevo Registro</title> </head> <body background="Fondojsp.png"> <h2>Por Favor llene los siguientes datos:</h2>
/*No olvide indicar la accin y el mtodo, en caso de no ponerlo se ejecutar un retorno de formulario como accin y el tipo de peticin ser GET. Note que para invocar a un Servlet solo se deber poner el nombre del archivo sin ninguna extensin. Tambin recuerde que debe escribirse tal y como esta nombrado distinguiendo maysculas y minsculas, tambin trate de usar solo rutas relativas y no absolutas */
<form name="f1" action="Guardar" method="POST"> <table border="0"> <tbody> <tr> <td> Nombre:</td> <td>Edad</td> <td>Direccion:</td>
<td>Correo electronico:</td> </tr><tr> <td> <input type="text" name="nombre" value="" /></td> <td> <input type="text" name="edad" value="" /></td> <td><input type="text" name="direccion" value="" /></td> <td> <input type="text" name="correo" value="" /></td> </tr></tbody></table> <input type="submit" value="Guardar" name="b1" /> </form> </body> </html>
/* Otra posible manera de hacer la interfaz seria utilizando Servlets como lo muestra el siguiente cdigo fuente: */ try { String formulario[]={"<html><head><title>Nuevo Usuario</title></head><body>", "<form id=\"form1\" name=\"form1\" method=\"post\" action=\"SaveUser\">", "Nombre: <input type=\"text\" name=\"nombre\" value=\"\"><br>", "Correo: <input type=\"text\" name=\"correo\" value=\"\"><br>", "Edad: <input type=\"text\" name=\"edad\" value=\"\"><br>", "Direccion: <input type=\"text\" name=\"direccion\" value=\"\"><br>", "<input type=\"submit\ value=\"guardar\"><br>", "</form></body></html>"};
/* Como podemos observar en el cdigo fuente, el formulario se encuentra dentro de un arreglo de cadenas de texto y despus por medio de un bucle y utilizando el mtodo lenght que nos devolver un tipo int con el tamao del arreglo imprimiremos los controles por medio del mtodo println de nuestro flujo de salida (out). */ for(int i=0; i<=formulario.lenght;i++){ out.println(formulario[i]); } /* Guardar.java es el Servlet encargado de recoger los datos de Nuevo.jsp, almacenarlos y enviarlos a la consulta que ser ejecutada por Statement. Ntese que un Servlet no contiene a una clase principal como alguna aplicacin JAVA ya que estos son invocados por peticiones de HTTP. */
Guardar.java
/* * @author Geniz */ /* Importamos las bibliotecas de java, java.io manipular los flujos de entrada y salida, mientras que javax.servlet y javax.servlet.http utilizarn la API de los Servlet para utilizar sus atributos y mtodos, adems de las peticiones HTTP ya sea POST, GET u otra. */ import java.io.*; import java.sql.*; import javax.servlet.*; import javax.servlet.http.*;
//Definimos nuestro Servlet y heredamos los atributos de HttpServlet
public class Guardar extends HttpServlet { /* Creamos un mtodo llamado processRequest, que recibe como argumentos a un objeto HttpServletRequest y otro HttpServletResponse, el primero se encargara de recoger y almacenar los datos que se encuentren en Nuevo.jsp, mientras que response se encargara de devolver una respuesta a la peticin, en este caso devolver una pgina HTML, este tipo de mtodos tendr que estar protegido forzosamente contra posibles excepciones mediante la palabra reservada throws. */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* Le diremos al objeto response el tipo de respuesta y el juego de caracteres que devolver en este caso texto y contenido HTML con el juego de caracteres UTF-8 que se refiere al juego UNICODE ligeramente modificado, aunque tambin puede devolver CSS y XML. */ response.setContentType("text/html;charset=UTF-8"); /* Crearemos un flujo de salida out el cual escribir el contenido de la respuesta (pgina HTML), para ello utilizaremos el mtodo getWriter del objeto response y se lo asignaremos a nuestro flujo de salida out que es de la clase PrintWriter. */
10
PrintWriter out = response.getWriter(); /* Ahora almacenaremos el contenido de los input text en cadenas mediante el objeto request e invocando a su metodo getParameter, el cual recibe como argumento el nombre de nuestros cuadros de textos de HTML, debido a que en la BD los datos son de tipo cadena no es necesaria conversin alguna, pero si por ejemplo almacenramos un ID que son nmeros tendramos que invocar al mtodo parseInt de la clase Integer, por ejemplo: int id = Integer.parseInt(request.getParameter("id")); y con esta lnea de cdigo obtendramos el id de nuestra tabla. */ try { String nombre=request.getParameter("nombre"); String edad=request.getParameter("edad"); String direccion=request.getParameter("direccion"); String correo=request.getParameter("correo"); /* Una vez almacenados los datos en variables enviaremos una consulta DML a nuestro mtodo Alta de nuestra clase Conexiones que contiene un objeto Statement que ser el encargado de ejecutarla, podemos ver que las variables van encerradas entre comillas simples y dobles, las primeras son para especificar a postgres (o cualquier otro SGBD) que se trata de una cadena de texto y las segundas indican lo mismo, pero ahora a JAVA. Para la insercin de nmeros solo restara omitir las comillas simples. Adems tambin especificamos los campos en los que vamos a realizar la insercin de datos, como pudo notar cuando definimos la tabla algunos campos estn en diferente orden y adems tenemos un campo llamado id que es auto numrico y es por ello que no necesitaremos insertar algn dato en el, as que en esta consulta definimos el orden de los campos y de su manipulacin.*/ String consulta = "INSERT INTO usuarios (nombre, ('"+nombre+"','"+edad+"','"+direccion+"','"+correo+"')"; //Enviamos la consulta al mtodo alta Conexiones.alta(consulta); /* Imprimimos la respuesta, mostrando dos links uno para ver los registros y otro para insertar uno nuevo */ out.println("<h2><center><br>Alta Registrada"); out.println("<br><br><a href=Listar>Ver Usuarios</a><br><br>"); out.println("<a href=Nuevo.jsp>Nuevo Usuario</a><br><br>"); /* Cerramos el flujo out a travs de close, encerrado en un bloque finally para indicar que pase lo que pase este tendr que ser cerrado*/ } finally { out.close(); } } edad, direccion, correo) VALUES
11
/* Finalmente invocamos al metodo processRequest a traves de una peticion POST de HTTP, esto lo haremos mediante doPost, de forma anloga podramos invocar al mtodo GET con doGet y de igual manera podramos invocar a cualquier tipo de peticin HTTP como doTrace, doPut, etc. Tambin es posible invocar a varios mtodos en el mismo cdigo y ya ser el Servlet el encargado de elegir la mejor opcin. Recuerde pasar los parmetros response y request.*/ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } }
/* En este ultimo archivo, la mayora de las instrucciones ya fueron explicadas anteriormente solo fijaremos nuestra atencin en las instrucciones nuevas. Listar.java ser el responsable de mostrar lo datos de la tabla mediante el objeto ResulSet */
12
Listar.java
import java.io.*; import java.net.*; import java.sql.*; import javax.servlet.*; import javax.servlet.http.*; import javax.swing.*; /** * * @author Geniz */ public class Listar extends HttpServlet { static Connection conexion=null; static Statement sentencia=null; static ResultSet rs=null; protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { Class.forName( " org.postgresql.Driver ").newInstance(); JOptionPane.showMessageDialog(null,"No se pudo cargar el puente JDBC-ODBC." ); //return; conexion = Conexiones.conexion; sentencia = Conexiones.conexion.createStatement(); JOptionPane.showMessageDialog(null,"Conexion establecida"); } catch(Exception er){ JOptionPane.showMessageDialog(null,"Error de conexion" ); } try{
/* Almacenamos la consulta en una cadena, despus se la enviamos al objeto llamado sentencia de la clase Conexiones para que la ejecute a travs del mtodo executeQuery, que funciona igual que su mtodo execute, y los resultados recibidos los almacenaremos en el ResulSet */
13
/* Despus utilizando al mtodo next de ResulSet, procederemos a extraer los datos mediante el atributo getString de este objeto, el cual devuelve una cadena, podemos especificar el nombre del campo como en el ejemplo o tambin podramos especificar el ndice por ejemplo: rs.getString(0); o en un caso mas especifico utilizar getInt, getBoolean, getDate, preste especial atencin si utiliza alguno de estos mtodos ya que debe tener en cuenta que deber utilizar tipos de datos especiales. */
while(rs.next()){ out.println(rs.getString("nombre")); out.println(rs.getString("edad")); out.println(rs.getString("direccion")); out.println(rs.getString("correo")); out.println("<br><hr>"); } out.println("<a href=Nuevo.jsp>Agregar Nuevo</a>"); } catch(Exception er){ JOptionPane.showMessageDialog(null,"Error de conexion" ); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } }
14
15
/* Index.php al igual que el index.jsp fungir como la pagina inicial y solo mostrara texto plano y un link que nos vinculara a la pagina que ser la encargada de almacenar los datos, php es un lenguaje tipo script del lado del servidor y este al igual que JSP nos dar la libertad de mezclar PHP con HTML. Recuerde que el cdigo de PHP deber estar entre <?php y ?>. */
Index.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Curriculum PHP</title> </head> <body background="fondophp.png"> <?php echo("<center><h1>Bienvenido a mi curriculum en PHP</h1></center>"); ?> Autor:Geniz<br ><hr> Detalles:<br > Languaje: PHP<br> Base de Datos: MySQL 5<br > Servidor: Apache 2.2, PLataforma Lampp (XAMPP 1.6)<br > Puerto: 80<br > Path: http://localhost/phpproject/index.php<br > <br><br> <center><a href="Datos.html">Continuar</a></center> </body>
</html>
16
/* Conexiones.php es un archivo que solo contiene una lista de variables inicializadas, las cuales contienen las principales referencias a utilizar para la conexin con la base de datos. */
Conexiones.php
<?php $servidor="127.0.0.1"; $usuario="root"; $password=""; $conexion=mysql_connect($servidor,$usuario,$password); $basedatos="diplomado"; $consultaver="select * from usuarios"; ?>
/*La siguiente pagina es la interfaz en la que el usuario escribir sus datos, Ahora notara que es solo una pagina HTML, y como podr recordar en la parte de Servlet y JSP mencionamos que JAVA tambin podra ocupar un archivo HTML con lo que podremos decir que esta pagina tambin nos servira para JAVA. */
Datos.html
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Nuevo Registro</title></head> <body background="fondophp.png"> <br><br><h2 align="center">Por Favor llene los siguientes datos:</h2> <form name="f1" action="insertar.php" method="POST"> <div align="center"> <table width="200" border="0"> <tr> <td>Nombre:</td> <td><input type="text" name="nombre" value="" /></td> </tr> <tr> <td>Edad</td> <td><input type="text" name="edad" value="" /></td> </tr> <tr> <td>Direccion:</td> <td><input type="text" name="direccion" value="" /></td> </tr> <tr> <td>Correo Electronico: </td> <td><input type="text" name="correo" value="" /></td> </tr> </table> </div> <p align="center"> </p> <div align="center"> <input type="submit" value="Guardar" name="b1" /> </div> </form></body> </html>
17
/* Insertar.php es el script que har la consulta SQL a MySQL, para ello seguir el siguiente procedimiento: 1. Recoger los datos del archivo Datos.html, 2. Guardar los valores a travs de request en variables, 3. Realizar la conexin a MySQL y por ultimo enviar la consulta al Manejador de BD. */
Insertar.php
<html> <head> <title>insertarndo...</title> </head> <body background="fondophp.png">
//Iniciamos nuestro script a travs de <?php y ?>
<?php
/* Solicitamos los campos pedidos en Datos.html, adems incluiremos el archivo conexiones.php que contiene las variables con los datos para la conexin, lo incluiremos a travs de la funcin require_once, aunque tambin pudimos usar include. No olvide que PHP distingue caracteres as que recuerde poner bien maysculas y minsculas, adems de que cada lnea debe terminar con ; */
18
mysql_connect($servidor,$usuario,$password);
/* Una ves establecida la conexin procederemos a ejecutar la consulta invocando a la funcin mysql_db_query que recibe como parmetros el nombre de la base de datos y despus la consulta */
if(sdebug) { echo"<p>--GENIZ SOFTWARE FOUNDATION && MARGEN SOFTWARE SOLUTIONS-</p>".mysql_error(); } ?> <div align=center> <h2><font color="green">TU </font><b><font color="green" size="5">Registro se ha grabado en la BD</font></b></h2> </div><br> <br>
/* Una vez pasado el proceso anterior mostraremos dos links al usuario para que puedad ver la informacin de la tabla o si lo prefiere agregar mas datos */
<div align=center><font color=green size=3><a href=leer.php>Visualizar el contenido de la tabla </div> <div align=center><font color=green size=3><a href=Nuevo.php>Agregar otro registro</div> </body> </html>
19
/* Para concluir con PHP y MySQL crearemos una pagina que se encargar de hacer una consulta a la base de datos con la finalidad de mostrar los registros que hay en la tabla. Por supuesto que de eso se encargara leer.php */
Leer.php
<html> <head><title>leer.php</title></head> <body > <center> <b><font color="green" size="5">DATOS ALMACENADOS <BR> </font></b><b><font color="green" size="5"><BR> </font></b> <center> <table cellspacing=3 cellpadding=3 border=0> <tr><td><TR><TD><TD>
/* Creamos nuestro formulario, le asignamos un tipo de peticin HTTP y le escribimos una accin a realizar. No olvide que sino escribe estos parmetros el formulario har un retorno de formulario y utilizara a GET por default*/
$result=mysql_db_query($basedatos,$consultaver); ?>
/*Ahora utilizando cdigo puramente HTML creamos un formato para mostrar los registros, para ello utilizaremos una tabla de HTML */
<table align=center border=1 cellspacing=4 cellpadding=4> <tr> <td><b><font color=RED size=3>Nombre:</td> <td><b><font color=RED size=3>Edad:</td> <td><b><font color=RED size=3>Direccion:</td> <td><b><font color=RED size=3>Correo:</td> </TR> Por: Domnguez Geniz A. Javier Geniz SWF && MSS 20
<?php
/* En otro script PHP mostraremos los registros con la funcin mysql_fetch_array que creara un arreglo con los valores que solicitamos en la consulta que se encuentra almacenada en la variable $result. Como se podr dar cuenta lo estamos haciendo de forma anloga a JAVA y de igual manera utilizando un bucle while para la iterar entre cada uno de los datos */
while($row=mysql_fetch_array($result)) {
/* Recuerda el flujo de salida out utilizado por los servlets? Si su respuesta es afirmativa, notara que imprimiremos los registros de igual manera en PHP pero claro utilizando una de sus funciones de impresin en pantalla, y por supuesto ser la funcin echo que de igual forma que nuestro flujo out (del tipo PrintWriter) imprime texto plano y etiquetas HTML .*/
echo '<tr> <td>'.$row["nombre"].'</td>'; echo '<td>'.$row["edad"].'</td>'; echo '<td>'.$row["direccion"].'</td>'; echo '<td>'.$row["correo"].'</td>'; '</tr>'; } mysql_free_result($result);
/* Para finalizar con PHP solo nos resta invocar a mysql_close que ser la responsable de cerrar la conexin */
21
22
/* En cuanto a ASP.NET implementaremos Microsoft Visual C#.Net como lenguaje de programacin y ADO.Net para la conexin con SQL Server, Con diferencia a los lenguajes antes ya explicados ASP.Net no recoger los datos de algn fichero externo, sino que lo construir en el mismo de forma dinmica. Esta primera pagina al igual que JAVA y PHP es la pagina inicial y solo muestra informacin plana, lo cabe resaltar es la estructura, que ser explicada en c/u del resto de las paginas */
Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Curriculum_ASP.Net._Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Curriculum en ASP.Net</title> </head> <body background="fondoasp.jpg"> <center><h1>Bienvenido a mi Curriculum en ASP.Net</h1></center> Autor:Geniz<br /><hr /> Detalles:<br /> Lenguaje de Programacion: C# <br /> Base de Datos: SQL Server 2008<br /> Servidor: ASP.NET Development Server<br /> Puerto: 1509<br /> Path: http://localhost:1509/Default.aspx<br /> </br></br> <center><a href="Insertar.aspx">Continuar</a></center> <form id="form1" runat="server"> </form> </body> </html>
23
/* Como fue mencionado anteriormente en este primer fichero llamado insertar.aspx ejecutara la consulta SQL al mismo tiempo que construir la forma dinmica que recoger los datos */
Insertar.aspx
/* Como podemos observar la pagina se encuentra dividida en dos partes importantes, la primera el bloque de declaracin de cdigo y la segunda que es el bloque proveedor de Cdigo */ /* Empezaremos por decirle a ASP.Net el lenguaje de programacin que vamos a utilizar por medio de la directiva <%@ Page language="C#" %> , en este caso C#, aunque tambin podramos haber utilizado Visual Basic.Net, VB Script ,J++ Script, etc. */
<script runat="server">
/* Iniciamos un mtodo y le pasamos como argumento las variables del sistema */
24
/* Definiremos a continuacin un objeto SqlCommand que ejecutara la consulta al igual que el Statement de JAVA, solo que este recibe primero la consulta y despus la conexin. */
int resultado;
/* Procederemos a abrir la conexin, como podr ver encerramos el cdigo en un bloque try al igual que en java con la finalidad de saber cuando se conect o por si hubo algn error */
try{ //Abrimos la conexion invocando al metodo open del objeto SqlConnection conexion.Open();
/* Ahora extraeremos los datos de cada objeto construido en la forma dinmica, en este caso de los objetos TextBox, mediante su propiedad Text y utilizaremos la propiedad add del mtodo Parameters del Objeto SqlCommand, de la manera siguiente: primero especificaremos el nombre de la variable SQL, este deber ser igual que lo coloco en la consulta y precedido por @, despus indicamos el tipo de datos SQL y la longitud */
comando.Parameters["@nombre"].Value = nombre.Text; comando.Parameters.Add(new SqlParameter("@edad",SqlDbType.NVarChar, 20)); comando.Parameters["@edad"].Value = edad.Text; comando.Parameters.Add(new SqlParameter("@direccion", SqlDbType.NVarChar, 20)); comando.Parameters["@direccion"].Value = direccion.Text; comando.Parameters.Add(new SqlParameter("@correo", SqlDbType.NVarChar, 20)); comando.Parameters["@correo"].Value = correo.Text;
/*Una vez enviada la consulta utilizando el mtodo ExecuteNonQuery de SqlCommand almacenaremos en la variable resultado el numero de consultas ejecutadas. */
resultado=comando.ExecuteNonQuery();
/* Despus utilizando el mtodo Write del objeto Response (hace lo mismo que el response de JAVA) mostraremos el valor devuelto por ExecuteNonQuery de SqlCommand y tambin un link a la siguiente pagina que mostrar los registros */
"+"<a href=Mostra_Grid.aspx>Ver
25
</script>
/* Para la segunda parte de esta pagina (Bloque proveedor de cdigo) construiremos la forma dinmica de la pagina (Web Form) que es solo la arte grafica de los objetos HTML con la diferencia que ahora utilizaran propiedades y mtodos especiales de ASP.Net */
<asp:Label Runat="server" ID="textoNombre" text="Nombre"/> <asp:TextBox Runat="server" ID="nombre"/><br/> <asp:Label Runat="server" ID="textoEdad" text="Edad"/> <asp:TextBox Runat="server" ID="edad"/><br/> <asp:Label Runat="server" ID="Label1" text="direccion"/> <asp:TextBox Runat="server" ID="direccion"/><br/> <asp:Label Runat="server" ID="Label2" text="correo"/> <asp:TextBox Runat="server" ID="correo"/><br/>
26
/* Por ultimo crearemos el botn que desencadenara al evento y ejecutara el mtodo Alta, para ello utilizaremos el evento OnClick del objeto button. No olvide poner runat=server*/
/* En este ultimo archivo mostraremos los registros en una tabla, pero podramos utilizar una sentencia de repeticin (while) para acceder a los campos de la tabla?, nuevamente la respuesta es Si, pero por ahora utilizaremos un componente llamado DataGrid o rejilla de datos, hecho especialmente para mostrar la tabla completa y no registro por registro, es una de la funcionalidades y beneficios que trae .Net. Nota: La mayora de cdigo ya fue explicada anteriormente y solo me limitare a explicar funciones nuevas */
Mostrar_Grid.aspx
<%@ Page language="C#"%> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SqlClient" %> <script runat="server"> void Page_Load(Object sender, EventArgs e) { SqlConnection conexion = new SqlConnection("server=GENIZ1188AE9D3\\SQLSERVER2008;database=diplomado;uid=sa;pwd=**************");
/* Declaramos un objeto SqlDataAdapter que ser el puente entre el almacn de los datos y el DataSet, nos va a permitir cargar el DataSet desde el origen de los datos y a actualizar los datos en el origen de datos con los del DataSet */
27
tabla.DataSource = ds.Tables["usuarios"].DefaultView;
/* Databind ofrece mayor compatibilidad con todo los navegadores, Mediante este mecanismo podemos asociar unos datos con un control del interfaz de usuario correspondiente. Adems muestra la informacin de manera automtica en controles como el DataGrid */
tabla.DataBind(); conexion.Close(); } catch(SqlException ex){ Response.Write("se ha producido una excepcin: "+ex); }} </script> <html> <head><title>Usuarios</title></head> <body><center><br /><br />
/* Declaracion del objeto Datagrid, especificamos el nombre, los bordes y el encabezado. */
<asp:DataGrid id="tabla" runat="server" BorderWidth="1" GridLines="Both" HeaderStyle-Font-Bold="True" HeaderStyle-BackColor="red"> </asp:DataGrid></center> </body> </html>
28
Notas finales Como se pudo dar cuenta en el transcurso del desarrollo del presente manual solo me limite a hacer altas de nuevos registro y a establecer una conexin. Entonces si quisiramos hacer modificaciones o eliminar los registros. Qu debemos hacer? La respuesta es sencilla, recuerda que al inicio en la creacin de la BD incluimos un campo llamado id pues es hora de utilizarlo. Lo nico que tendr que realizar ser crear una interfaz que recoja los datos utilizando HTML, deber pedir el id y antes de enviarlo a la consulta tendr hacer una conversin a tipo entero solo para JAVA y C#, ya que los tipos de datos en PHP se realizan en la asignacin de las variables. La conversin se hace de la sig. Forma: JAVA int id= Integer.parseInt(request.getParameter("id")); C# int id=Int.Parse(campo id); y las consultas podran quedar as: String consBorrar=Delete * from usuarios where id=+id; String consAct=Update usuarios set nombre= +nombre+ where id=+id; No olvide que los tres lenguajes utilizados son sensibles a maysculas y minsculas, y que adems deben terminar con un fin de lnea ;. Tambin es importante mencionar que el proceso seguido por cada tipo de aplicacin para realizar la conexin y el alta se pueden hacer en los tres, es decir, podemos utilizar un formulario HTML para recoger los datos o crear la forma dinmica, conexin y la insercin en un solo fichero. Adems cabe recalcar que los gestores de bases de datos tambin pueden ser conectados con otro diferente lenguaje de programacin. Por ejemplo podemos conectar a SQL Server con JAVA mediante JDBC u ODBC, MySQL con ASP.Net mediante ODBC o MySQL Conector NET, y a PostgreSQL con PHP. Ya para finalizar aclarare que todo este trabajo se realizo con los IDEs previamente mencionados, pero es importante saber que de igual manera se puede realizar sin ellos, tan solo podramos haber utilizado una herramienta como el bloc de notas, necesitaramos un servidor apache para PHP, Tomcat o WebSphere para JAVA e Internet Information Service para ASP.NET, adems de .Net Framework y la Java Virtual Machine junto con la API Servlet 2.5.
29