Sei sulla pagina 1di 18

Instituto Tecnolgico de Piedras Negras

Carrera: Ingeniera en Sistemas Computacionales

Tpicos Avanzados de Programacin

Ing. Wilber

Unidad IV

Alumno: Abdiel Anbal Gutirrez Herrera

N control: 11430324

ndice Unidad IV Acceso a datos 1.1. Introduccin 1.2. Creacin de una base de datos y tablas 1.3. Manipulacin de los datos

4.1 Introduccin

Acceso a bases de datos (C# y Java)


C# y Java utilizan medios similares para obtener acceso a los datos de las bases de datos. Tanto C# como Java requieren que un controlador de bases de datos realice operaciones reales con bases de datos. Adems, ambos requieren una conexin con la base de datos, una consulta SQL que se ejecutar en la conexin con la base de datos y un conjunto de resultados procedentes de la ejecucin de la consulta.

Comparar controladores de bases de datos


Se pueden utilizar controladores de bases de datos, como JDBC u ODBC, para obtener acceso a datos de Java y C#. El controlador JDBC (Java Database Connectivity, conectividad de bases de datos de Java) se utiliza desde un programa escrito en Java. El controlador de ODBC (Open Database Connectivity, Conectividad abierta de bases de datos) es la interfaz de programacin de base de datos que utiliza Microsoft para tener acceso a distintas bases de datos relacionales en diversas plataformas. Tambin existe un estndar que sirve de puente entre JDBC-ODBC en las versiones Solaris y Windows de la plataforma Java, para que se pueda utilizar ODBC desde un programa Java. En Java, se proporciona al controlador la informacin de la cadena de conexin para un identificador de conexin, de la siguiente forma: final static private String url = "jdbc:oracle:server,user,pass, )"; En C#, si se utiliza .NET Framework, no es necesario cargar controladores ODBC ni JDBC para tener acceso a la base de datos. Slo hay que establecer la cadena de conexin para el objeto de conexin a bases de datos, de la siguiente forma: C# static string connectionString = "Initial Catalog=northwind;Data Source=(local);Integrated Security=SSPI;"; static SqlConnection cn = new SqlConnection(connectionString); Para obtener ms informacin sobre el controlador ODBC para bases de datos Oracle, vea ODBC Driver for Oracle. Para obtener informacin adicional sobre el proveedor OLE DB para bases de datos DB2, vea Microsoft Host Integration Server 2000 Developer's Guide y Administration and Management of Data Access Using the OLE DB Provider for DB2. Microsoft SQL Server 2000 Driver for JDBC es un controlador JDBC de tipo 4, que proporciona acceso a SQL Server 2000 a travs de cualquier subprograma, aplicacin o servidor de aplicaciones habilitado para Java.

Ejemplo de lectura de bases de datos de Java


En Java, para realizar una operacin de lectura de bases de datos, se puede utilizar un objeto ResultSet creado por el mtodo executeQuery del objetoStatement. El

objeto ResultSet contiene los datos devueltos por la consulta. A continuacin, puede recorrer en iteracin el objeto ResultSet para obtener acceso a los datos. El ejemplo siguiente proporciona el cdigo Java que se va a leer en una base de datos. Connection c; try { Class.forName (_driver); c = DriverManager.getConnection(url, user, pass); } catch (Exception e) { // Handle exceptions for DriverManager // and Connection creation: } try { Statement stmt = c.createStatement(); ResultSet results = stmt.executeQuery( "SELECT TEXT FROM dba "); while(results.next()) { String s = results.getString("ColumnName"); // Display each ColumnName value in the ResultSet: } stmt.close(); } catch(java.sql.SQLException e) { // Handle exceptions for executeQuery and getString: } Asimismo, para realizar una operacin de escritura en la base de datos, se crea un objeto Statement a partir del objeto Connection. El objetoStatement tiene mtodos para ejecutar consultas SQL y actualizaciones en una base de datos. Las actualizaciones y consultas se encuentran en una cadena que contiene el comando SQL de una operacin de escritura que se utiliz en el mtodo executeUpdate del objeto Statement para devolver un objeto ResultSet.

Ejemplo de lectura de bases de datos de C#


En C#, mediante .NET Framework, el acceso a los datos se simplifica an ms a travs del conjunto de clases proporcionado por ADO.NET, que admite el acceso a bases de datos con los controladores ODBC, as como tambin, a travs de proveedores OLE DB. Las aplicaciones de C# pueden interactuar con bases de datos SQL para la lectura, escritura y bsqueda de datos mediante clases ADO.NET de .NET Framework y a travs de Microsoft Data Access Component (MDAC). El espacio de nombres y las clases System.Data.SqlClient de .NET Framework facilitan an ms el acceso a las bases de datos de SQL Server. En C#, para realizar una operacin de lectura de la base de datos, puede utilizar una conexin, un comando y una tabla de datos. Por ejemplo, para conectarse a una base de datos de SQL Server con el espacio de nombres System.Data.SqlClient, puede utilizar lo siguiente:

Una clase SqlConnection. Una consulta, como una clase SqlCommand. Un conjunto de resultados, como una clase DataTable. .NET Framework proporciona DataAdapter, que rene estos tres objetos, de la siguiente forma: El objeto SqlConnection se establece mediante la propiedad de conexin del objeto DataAdapter. La consulta que se ejecutar se especifica con la propiedad SelectCommand de DataAdapter. El objeto DataTable se crea utilizando el mtodo Fill del objeto DataAdapter. El objeto DataTable contiene los datos del conjunto de resultados devueltos por la consulta. Puede recorrer en iteracin el objeto DataTable para tener acceso a las filas de datos usando la coleccin de filas. Para compilar y ejecutar el cdigo, necesita lo que se indica a continuacin; de lo contrario, se produce un error en la lneadatabaseConnection.Open(); y se produce una excepcin. Microsoft Data Access Components (MDAC) versin 2.7 o posterior. Si utiliza Microsoft Windows XP o Windows Server 2003, ya dispone de MDAC 2.7. Sin embargo, si utiliza Microsoft Windows 2000, es posible que tenga que actualizar la versin de MDAC instalada en el equipo. Para obtener ms informacin, vea MDAC Installation. Tener acceso a la base de datos Northwind de SQL Server y privilegios de seguridad integrados para el nombre de usuario actual que ejecuta el cdigo en un servidor SQL Server local con la base de datos de ejemplo Northwind instalada. C# // Sample C# code accessing a sample database // You need: // A database connection // A command to execute // A data adapter that understands SQL databases // A table to hold the result set namespace DataAccess { using System.Data; using System.Data.SqlClient; class DataAccess { //This is your database connection: static string connectionString = "Initial Catalog=northwind;Data Source=(local);Integrated Security=SSPI;"; static SqlConnection cn = new SqlConnection(connectionString); // This is your command to execute: static string sCommand = "SELECT TOP 10 Lastname FROM Employees ORDER BY EmployeeID"; // This is your data adapter that understands SQL databases: static SqlDataAdapter da = new SqlDataAdapter(sCommand, cn);

// This is your table to hold the result set: static DataTable dataTable = new DataTable(); static void Main() { try { cn.Open(); // Fill the data table with select statement's query results: int recordsAffected = da.Fill(dataTable); if (recordsAffected > 0) { foreach (DataRow dr in dataTable.Rows) { System.Console.WriteLine(dr[0]); } } } catch (SqlException e) { string msg = ""; for (int i=0; i < e.Errors.Count; i++) { msg += "Error #" + i + " Message: " + e.Errors[i].Message + "\n"; } System.Console.WriteLine(msg); } finally { if (cn.State != ConnectionState.Closed) { cn.Close(); } } } } }

4.2 Creacin de una base de datos y tablas USE master GO CREATE DATABASE tonysk8shop ON ( NAME = tonysk8shop_data, FILENAME = 'C:\PRACTICAS\tonysk8shop_data.mdf', SIZE = 10MB, MAXSIZE = 50MB, FILEGROWTH = 5MB ) LOG ON ( NAME = DBPractica_log, FILENAME ='C:\PRACTICAS\tonysk8shop_log.ldf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB) CREATE TABLE dbo.Clientes ( IDCliente int NOT NULL PRIMARY KEY, Nombre varchar(24) NOT NULL, ApellidoP varchar(50) NOT NULL, APellidoM varchar(50) NOT NULL, Calle varchar(75) NOT NULL, Numero int NOT NULL, Colonia varchar(75) NOT NULL, Telefono int NOT NULL, Edad int NOT NULL, Genero varchar(1) NOT NULL, Facebook varchar(70) NOT NULL, ) CREATE TABLE dbo.Compras ( IDCliente int constraint fk_Compras_Cliente foreign key (IDCliente) references dbo.Clientes(IDCliente), ClaveProducto int constraint fk_Productos_Cliente foreign key(ClaveProducto) references dbo.Productos(ClaveProducto), FolioCompra int NOT NULL PRIMARY KEY, Fecha date NOT NULL, Cantidad int NOT NULL, PrecioUNitario money NOT NULL, Total money NOT NULL, ) CREATE TABLE dbo.Productos (

ClaveProducto int NOT NULL PRIMARY KEY, Marca varchar(30) NOT NULL, Medida float NOT NULL, Precio money NOT NULL, Cantidad int NOT NULL, )

4.3.-MANIPULACIN DE LOS DATOS Lenguaje de Manipulacin de Datos (Data Manipulation Language, DML) es un lenguaje proporcionado por el sistema de gestin de base de datos que permite a los usuarios de la misma llevar a cabo las tareas de consulta o manipulacin de los datos, organizados por el modelo de datos adecuado. El lenguaje de manipulacin de datos ms popular hoy da es SQL, usado para recuperar y manipular datos en una base de datos relacional. Otros ejemplos de DML son los usados por bases de datos IMS/DL1, CODASYL u otras. Son DML: Select, Insert, Delete y Update Se clasifican en dos grandes grupos: Lenguajes procedimentales. En este tipo de lenguaje el usuario da instrucciones al sistema para que realice una serie de procedimientos u operaciones en la base de datos para calcular un resultado final. Lenguajes de consulta no procedimentales. En los lenguajes no procedimentales el usuario describe la informacin deseada sin un procedimiento especfico para obtener esa informacin.

INSERT Para introducir datos nuevos en una base de datos vamos a utilizar la orden INSERT de SQL. Con la sintaxis que se muestra a continuacin seremos capaces de introducir datos nuevos en cualquiera de las tablas que componen una determinada BD. En principio, veremos la expresin mnima de la orden, formada por dos clusulas, INTO y VALUES. INSERT INTO nombreTabla VALUES (listaExpresiones) DELETE La sentencia DELETE nos permite borrar las filas contenidas en una tabla. DELETE [FROM] nombreTabla [WHERE condicin] La sentencia UPDATE nos permite modificar la informacin contenida en una tabla. UPDATE

UPDATE nombreTabla [aliasTabla] SET { {columna=expresion | columna=subconsulta} | listaColumnas=subconsulta} [WHERE condicin]

ndice Unidad V Acceso a datos 5.1. Definicin conceptual de componentes, paquetes/libreras 5.2 Uso de libreras proporcionadas por el lenguaje 5.3. Creacin y uso de paquetes/libreras definidas por el usuario 5.4 Concepto de hilo 5.5 Creacin y control de hilos 5.6 Sincronizacin de hilos

UNIDAD 5 TOPICOS SELECTOS


5.1.-DEFINICION CONCEPTUAL DE COMPONENTES, PAQUETES/LIBRERIAS Componente: Es una clase abstracta que representa todo lo que tiene una posicin, un tamao, puede ser pintado en pantalla y puede recibir eventos. Los Objetos derivados de la clase Componente que se incluyen en el Abstract Windows Toolkit son los que aparecen a continuacin: Button Canvas Checkbox Choice Label List Scrollbar

Container Panel Windows o Dialog o Frame TextComponent TextArea TextField

Un paquete en Java es lo que su nombre lo indica, un paquete o conjunto de clases, lgicamente, que tienen cosas en comn. Lgicamente un programado puede agruparlas con o sin criterio, pero lo ideal es que se dediquen a funciones especficas. Tambin los paquetes definen una jerarqua de directorios, que permiten igualmente agrupas las clases, cosa de desplegar los archivos mas ordenadamente. LIBRERAS La utilizacin de objetos dinmicos supone dejar pendiente en el montaje de la aplicacin el enlace de dichos objetos. Cuando la aplicacin est en ejecucin, y slo entonces, se produce el enlace (dinmico) con los objetos contenidos en la librera. La creacin de libreras dinmicas corre a cargo del enlazador o montador (en nuestro caso el ld) aunque tambin es posible indicar al compilador las opciones necesarias para el montaje y de ese modo, ser l quien se encargue de pasrselas al montador. Cuando se crea un objeto dinmico es necesario que dicho cdigo objeto sea independiente de la posicin, para conseguir este tipo de cdigo debe especificarse al compilador la opcin -fPIC (Position IndependentCode). Dicho flag debe indicarse tanto en la compilacin como en el montaje de la librera. Para montar los objetos es necesario adems indicar la opcin -shared para que el resultado sea un fichero objeto compartible.

5.2.-USO DE COMPONENTES (VISUALES Y NO VISUALES) PROPORCIONADOS POR EL LENGUAJE Un componente desde el punto de vista de programacin est compuesto por varias secciones y el conjunto de todas ellas dan lugar a la creacin de dicho componente. Por tanto, primero para no perder el norte, vamos a empezar definiendo el convenio que es utilizado para organizar dichas secciones por TinyOs. En general, un componente posee tres grandes secciones que son: Configuration, Implementation, Module. Estas tres secciones han de estar obligatoriamente presentes en cualquier componente aunque puedan estar vacas. El estndar de T i n y O s determina, que las secciones de Configuration e Implementatin han de ir en un fichero que recibir el nombre del componente con la extensin .nc y la tercera seccin de Module deber de ir en otro fichero aparte que recibir el nombre del componente concatenado con un M mayscula (la M da el significado al fichero, es el significado de Module) , este ltimo fichero tambin poseer a extensin .nc. Otra buena costumbre consiste en crear un fichero de header o cabecera con extensin .h que contenga todas las enumeraciones, registros o tipos de datos creados por el usuario de los que

hace uso la aplicacin, y cuando se realiza esto la forma de ligar dicho fichero con los otros dos es utilizando al principio de los otros fichero la directiva include sheader; aunque como mencin especial decir que si nos fijamos mejor en este directiva se puede ver que no se incorpora la extensin .h en la misma. Ahora que ya sabes cuales son las secciones que va a contener cada fichero vamos a empezar a explicar cada una de ellas. Implementatin. Esta seccin se va a encargar de definir las conexiones que hay entre los diferentes componentes que utiliza la aplicacin, esto es debido a que si recordamos un poco, se ha comentado que la programacin de un componente (que se llevar a cabo en la seccin de module) se hace utilizando interfaces y dichas interfaces para poder utilizar las que ha de proporcionar un componente, entonces bsicamente es esta seccin se definen cules son los componentes que proporcionan las interfaces a nuestra aplicacin (por lo general sern componentes primitivos). Una vez que conocemos la finalidad de esta seccin y llegados a este punto, vamos a insertar un concepto nuevo que es la diferencia que existe entre una aplicacin que est ya disponible para ser ejecutada en un sensor y un componente cualquiera. La diferencia es muy poca, y consiste en que una aplicacin es un componente como cualquier cosa en este lenguaje que en su seccin de implementacin hace uso de un componente especial denominado Main.

5.3.- CREACIN Y USO DE PAQUETES/LIBRERIAS DEFINIDAS POR EL USUARIO

Los paquetes son grupos de clases relacionadas; ayudan a organizar su cdigo y proporcionan otra capa encapsulamiento. En programacin, los paquetes, con frecuencia son tiles para agrupar las piezas relacionadas de un programa. Un paquete sirve para dos propsitos: primero, suministra un mecanismo por el cual piezas relacionadas de un programa pueden ser organizadas como una unidad. Se debe tener acceso a las clases definidas dentro de un paquete a travs de su nombre de paquete. As, un paquete proporciona la manera de nombrar una coleccin de clases. Segundo, un paquete participa en los mecanismos de control de acceso en java. Las clases definidas dentro de un paquete pueden hacerse privadas a ese paquete y no accesibles por cdigo fuera del paquete. De este modo, el paquete suministra un medio por el cual las clases pueden ser encapsuladas.

DEFINIR UN PAQUETE: Todas las clases en Java pertenecen a algn paquete. Como se mencion anteriormente, cuando no se especifica la declaracin package se usa el paquete predeterminado (o global). Adems, el paquete predeterminado no tiene nombre, lo que lo hace transparente. Aunque el paquete predeterminado es vlido para programas de prueba cortos, es inadecuado para aplicaciones reales. Para crear un paquete, coloque un comando package en la parte superior del archivo fuente de java. Las clases declaradas dentro de ese archivo pertenecern al paquete especificado. Puesto que un paquete define un espacio de nombre, los nombres de las clases que coloque dentro del archivo se convierten en parte de ese espacio del nombre del paquete. La siguiente es la forma general de la declaracin package: packagepkg; Aqu, pkg es el nombre del paquete. Por ejemplo, el siguiente enunciado crea un paquete de nombre Project1. package Project1; Java usa el sistema de archivo para manejar los paquetes con cada paquete almacenado en su propio directorio. Por ejemplo, los archivos .class para las clases que usted declare sean partes de Project1 debe guardarse en un directorio llamado Project1.

5.4 CONCEPTO DE HILO El multihilo soportado en Java gira alrededor del concepto de hilo. La cuestin es, qu es un hilo? De forma sencilla, un hilo es un nico flujo de ejecucin dentro de un proceso. Pero ser mejor comenzar desde el principio y explicar qu es un proceso. Un proceso es un programa ejecutndose dentro de su propio espacio de direcciones. Java es un sistema multiproceso, esto significa que soporta varios procesos corriendo a la vez dentro de sus propios espacios de direcciones. Estamos ms familiarizados con el trmino multitarea, el cual describe un escenario muy similar al multiproceso. Por ejemplo, consideremos la cantidad de aplicaciones que corren a la vez dentro de un mismo entorno grfico. Mientras escribo esto, est corriendo Microsoft Word adems de Internet Explorer, Windows Explorer, CD Player y el Volumen Control. Estas aplicaciones son todos procesos ejecutados dentro de Windows 95. De esta forma, se puede pensar que los procesos son anlogos a las aplicaciones o a programas

aislados, pero cada proceso tiene asignado espacio propio de ejecucin dentro del sistema. Un hilo es una secuencia de cdigo en ejecucin dentro del contexto de un proceso. Los hilos no pueden ejecutarse ellos solos; requieren la supervisin de un proceso padre para correr. Dentro de cada proceso hay varios hilos ejecutndose. Por ejemplo, Word puede tener un hilo en background chequeando automticamente la gramtica de lo que estoy escribiendo, mientras otro hilo puede estar salvando automticamente los cambios del documento en el que estoy trabajando. Como Word, cada aplicacin (proceso) puede correr varios hilos los cuales estn realizando diferentes tareas. Esto significa que los hilos estn siempre asociados con un proceso en particular. Los hilos a menudo son conocidos o llamados procesos ligeros. Un hilo, en efecto, es muy similar a un proceso pero con la diferencia de que un hilo siempre corre dentro del contexto de otro programa. Por el contrario, los procesos mantienen su propio espacio de direcciones y entorno de operaciones. Los hilos dependen de un programa padre en lo que se refiere a recursos de ejecucin. La siguiente figura muestra le relacin entre hilos y procesos.

5.5.-CREACION Y CONTROL DE HILOS En Java, los hilos comparten el mismo espacio de memoria. Incluso comparten gran parte del entorno de ejecucin, de modo que la creacin de nuevos hilos es mucho ms rpida que la creacin de nuevos procesos. La ventaja que proporcionan los hilos es la capacidad de tener ms de un camino de ejecucin en un mismo programa. As, con un nico proceso, ejecutndose una JVM (Java Virtual Machine), habr siempre ms de un hilo, cada uno con su propio camino de ejecucin. En cuanto al proceso de creacin de hilos, son dos los mecanismos que nos permiten llevarlo a cabo en Java: implementando la interfaz Runnable, o extendiendo la clase Thread, esto es,

creando una subclase de esta clase. Lo ms habitual es crear hilos implementando la interfaz Runnable, dado que las interfaces representan una forma de encapsulamiento del trabajo que una clase debe realizar. As, se utilizan para el diseo de requisitos comunes a todas las clases que se tiene previsto implementar. La interfaz define el trabajo, la funcionalidad que debe cubrirse, mientras que la clase o clases que implementan la interfaz realizan dicho trabajo (cumplen esa funcionalidad). Todas las clases o grupos de clases que implementen una cierta interfaz debern seguir las mismas reglas de funcionamiento. El otro mecanismo de creacin de hilos, como ya hemos dicho, consistira en la creacin previa de una subclase de la clase Thread, la cual podramos instanciar despus. Por ejemplo, class MiThread extends Thread { public void run() { ... } } se corresponde con la declaracin de un clase, MiThread, que extiende la clase Thread, sobrecargando el mtodo Thread.run heredado con su propia implementacin. Arranque de un hilo En el contexto de las aplicaciones, sabemos que es main la primera funcin que se invoca tras arrancar, y por tanto, lgicamente, es el lugar ms apropiado para crear y arrancar otros hilos. La lnea de cdigo: t1 = new TestTh( "Thread 1",(int)(Math.random()*2000) ); siendo TestTh una subclase de la clase Thread (o una clase que implemente la interfaz Runnable) crea un nuevo hilo. Los dos argumentos pasados, sin mayor relevancia, satisfarn el prototipo del constructor de la clase y se utilizarn para la inicializacin del objeto. Al tener control directo sobre los hilos, tenemos que arrancarlos explcitamente. Como ya se coment anteriormente, es la funcin miembro start la que nos permite hacerlo. En nuestro ejemplo sera: t1.start(); start, en realidad es un mtodo oculto en el hilo que llama al mtodo run.

5.6.-SINCRONIZACION DE HILOS Cuando dos o ms hilos necesitan acceder de manera simultnea a un recurso de datos compartido necesitan asegurarse de que slo uno de ellos accede al mismo cada vez. Java proporciona un soporte nico, el monitor, es un objeto que se utiliza como cerrojo exclusivo. Solo uno de los hilos puede ser el propietario de un monitor en un instante dado. Los restantes hilos que estuviesen intentando acceder al monitor bloqueado quedan en suspenso hasta que el hilo propietario salga del monitor.

Todos los objetos de Java disponen de un monitor propio implcitamente asociado a ellos. La manera de acceder a un objeto monitor es llamando a un mtodo marcado con la palabra clave synchronized. Durante todo el tiempo en que un hilo permanezca en un mtodo sincronizado, los dems hilos que intenten llamar a un mtodo sincronizado sobre la misma instancia tendrn que esperar. Para salir del monitor y permitir el control del objeto al siguiente hilo en espera, el propietario del monitor slo tiene que volver del mtodo La sentencia synchronized Si se utiliza una clase que no fue diseada para accesos multihilo y, por ello, dispone de mtodos no sincronizados que manipulan el estado interno, puede envolver la llamada al mtodo en un bloque sincronizado. El formato general de la sentencia sincronizada es el siguiente: synchronized(objeto) sentencia; En el ejemplo, objeto es cualquier referencia al objeto, y sentencia suele ser un bloque que incluye una llamada al mtodo de objeto, que solo tendr lugar una vez que el hilo haya entrado con xito en el monitor de objeto. Ahora veremos las formas de sincronizacin con un ejemplo: class Callme { void call (String msg) { * tambin poda haber puesto synchronized antes de void * System.out.print("[" + msg); try Thread.sleep(1000); catch (Exception e); System.out.println("]"); } } class caller implements Runnable { String msg; Callme target; public caller(Callme t, String s) { target = t; msg = s; new Thread(this).start(); } public void run() { synchronized(target) { target.call(msg); } } } class Synch { public static void main(String args[]) { Callme target = new Callme(); new caller(target, "Hola"); new caller(target, "Mundo"); new caller(target, "Sincronizado"); } }

Este programa imprime por pantalla el literal "Hola Mundo Sincronizado", cada palabra en una lnea y entre comillas, se crea una instancia de Callme y tres instancias de caller que cada una de ellas referencia al mismo Callme con lo que necesitamos de una sincronizacin para el acceso a Callme, pues sino se mezclaran las tres llamada al haber una sentencia sleep que retrasa la ejecucin de Callme dando lugar a que antes de que acabe un proceso deje libre el acceso a dicho objeto.

Potrebbero piacerti anche