JDBC- Conectividad Base de Datos Con Java

download JDBC- Conectividad Base de Datos Con Java

If you can't read please download the document

description

Este es el documento que usted necesita para realizar una prueba semestral exitosa.¿ya lo revisó?

Transcript of JDBC- Conectividad Base de Datos Con Java

-------------------------------------------------------------------------------jdbc - conectividad de la base de datos de java por kevin henry traducido por paulo n. lama qu es el jdbc? la conectividad de la base de datos de java (jdbc , java database connectivity) es un marco de programacin para los desarrolladores de java que escriben los programas que tienen acceso a la informacin guardada en bases de datos, hojas de calculo, y archivos "planos". jdbc se utiliza comnmente para conectar un programa del usuario con una base de datos por detrs de la escena, sin importar qu software de administracin o manejo de base de datos se utilice para controlarlo. de esta manera, jdbc es una plataforma-cruzada [1]. este artculo proporcionar un cdigo de introduccin que demuestra el acceso a la base de datos de los programas de java que utilizan las clases jdbc api, que est disponible para la transferencia directa libre del sitio de sun [3 ]. una base de datos que conecta con otros programas se llama fuente de datos. muchas fuentes de datos, incluyendo los productos producidos por microsoft y oracle, utilizan ya un estndar llamado conectividad abierta de la base de datos (odbc, open database connectivity). mucho de la herencia en la programacin en c y de los programas del perl utilizan odbc para conectar con las fuentes de datos. el odbc consolid mucha de la concordancia entre los sistemas de administracin de base de datos. las structuras de jdbc estn construidos en esta caracterstica, e incrementa el nivel de abstraccin. los puentes de jdbc-odbc se han creado para permitir que los programas de java conecten con el software compatible odbc de la base de datos [1]. este artculo asume que los lectores ya tienen una fuente de datos establecida y estn moderadamente familiarizados con el lenguaje de interrogacin estructurado o ms conocido como sql, structured query language, la lengua de mando para agregar, extraer datos o expedientes, asi como otras manipulaciones bsicas de la base de datos. vea la gua sql de hoffman si usted es un principiante o necesite repasar conceptos importantes. [2]. usando el programa piloto de jdbc sin importar la localizacin, la plataforma, o el programa piloto de la fuente de datos (oracle, microsoft, etc.), el jdbc se conecta con una fuente de datos menos difcil proporcionando a una coleccin de extensiones (class) que contienen los detalles abstractos de la interaccin de la base de datos. la ingeniera del software en los programas con jdbc tambin conduce a la reutilizacin del mdulo. los programas pueden fcilmente insertados en diferentes infraestructuras para su almacenamiento de datos (cualquier plataforma usted elija utilizar en el futuro) con solo sustituir el programa piloto o jdbc driver. mientras usted se maneja con las plataformas ms populares en base de datos (tales como oracle, informix, microsoft, mysql, etc.), hay un programa piloto de jdbc escrito que permite que los programas puedan conectarse y manipular los datos. usted puede descargar un programa piloto especfico de jdbc del fabricante de su sistema de administracin de base de datos (dbms) o de terceros (en la caja de los productos abiertos menos populares) [5]. el programa piloto de jdbc para su base de datos vendr con instrucciones especficas de hacer los archivos del tipo class del programa piloto disponible para la jvm o mquina virtual de java, que va a hacer funcionar su programa. los programas pilotos de jdbc utilizan el built-in de java drivermanager para abrir y tener acceso a una base de datos dentro de su programa de java.

para comenzar a conectar con una fuente de datos, usted primero necesita al instante, un objeto de su programa piloto de jdbc. esto esencialmente requiere una sola lnea de cdigo, un comando al drivermanager ordenando que la mquina virtual de java cargue el bytecode de su programa piloto en la memoria, donde sus mtodos estarn disponibles para su programa. el parmetro o string abajo es el nombre calificado de la clase del programa piloto que usted est utilizando para su combinacin de plataformas: class.forname("org.gjt.mm.mysql.driver").newinstance(); conectando con su base de datos para manipular realmente su base de datos, usted necesita conseguir un objeto connection class de su programa piloto. por lo menos, su programa piloto necesitar un url para la base de datos y los parmetros para el control de acceso, que generalmente implica la autentificacin del password o clave estndar en una cuenta de la base de datos. como usted puede ya estar enterado, el estndar del localizador de recurso uniforme o mas bien conocido por sus siglas en ingles como url (uniform resource locator) es mucho ms que solamente decir a su navegador dnde encontrar un sitio web: http://www.vusports.com/index.html el url para nuestro programa piloto y para la base de datos se parece a esto: jdbc:mysql://db_server:3306/contacts/ aunque ambos url lucen diferente, ellos estn realmente de la misma forma: el protocolo para la conexin, el nombre del computador principal de la mquina y el nmero del puerto opcional, y la ruta de direccin del archivo. su programa piloto de jdbc vendr con las instrucciones que detallan cmo formar el url para su base de datos. parecer similar al ejemplo anterior dado. usted querr controlar el acceso a sus datos, a menos que la seguridad no sea un problema. el minimo comn denominador estndar para la autentificacin a una base de datos es un par de cadenas, una cuenta y un password. el nombre y el password de la cuenta que usted da al programa piloto debieran tener significado dentro de su dbms, donde los permisos establecidos para controlar los privilegios de acceso. nuestro ejemplo del programa piloto del jdbc utiliza el objeto properties class para pasar la informacin con drivermanager , el cual rinde como un objeto connection: properties props = new properties(); props.setproperty("user", "contacts"); props.setproperty("password", "blackbook"); connection con = drivermanager.getconnection( "jdbc:mysql://localhost:3306/contacts/", props); ahora que tenemos un objeto connection, podemos pasar fcilmente los comandos a travs de l a la base de datos, aprovechndose de las capas de abstraccin proporcionadas por jdbc. estado de la estructuracin las bases de datos se componen de tablas, de las cuales se componen de filas.

cada tabla de la base de datos tiene un conjunto de las filas que definen qu tipos de datos estn en cada registro. los registros tambin se guardan como filas de la tabla de una base de datos con una fila por registro. utilizamos la conexin de la fuente de datos creada en la ultima seccin para ejecutar un comando a la base de datos. escribimos comandos que van a ser ejecutados por el dbms de base de datos usando el sql. el sintaxis del estado del sql, o de la indagacin, consiste en la accin de una palabra clave, de un nombre del objetivo de la tabla, y algunos parmetros. por ejemplo: insert into songs values ( "jesus jones", "right here, right now"); insert into songs values ( "def leppard", "hysteria"); cada una de estas indagaciones del sql agregaron una fila de datos a la tabla "canciones" en la base de datos. naturalmente, el orden de los valores insertados en la tabla deben corresponder con las columnas de la tabla, y los tipos de datos de los nuevos valores deben corresponder con los tipos de datos de las columnas respectivas. para mayor informacin sobre los tipos de datos utilizados en su dbms, consulte su manual de referencia. para ejecutar el estado del sql usando el objeto connection, primero usted necesita crear el objeto estado, que ejecutar la indagacin (query) contenida en una palabra clave. statement stmt = con.createstatement(); string query = ... // define query stmt.executequery(query); ejemplo: analizando el texto en un tabla de la base de datos en la modernizacin del sistema para mantener los registros, usted encuentra un archivo "plano" de datos que fueron creados mucho antes de que la llegada de una base de datos mas moderna. en vez de tipear todos los datos del archivo "plano" al dbms, usted puede crear un programa que lea adentro el archivo del texto, insertando cada fila en una tabla de la base de datos, el cual se ha creado para modelar la estructura original del archivo "plano". en este caso, examinamos un archivo muy simple del texto. hay solamente algunas filas y columnas, pero el principio aqu es el mismo cuando se trata de aplicar y escalar a problemas ms grandes. hay solamente pocos pasos: abra una conexin a la base de datos. baje hasta el extremo final del archivo: lea la lnea del texto del archivo "plano". analice la lnea del texto en las columnas de la tabla. ejecute una declaracin o estado del sql para insertar el registro. aqu est el cdigo del programa del ejemplo: import java.io.*; import java.sql.*; import java.util.*; public class texttodatabasetable { private static final string db = "contacts", table_name = "records",

host = "jdbc:mysql://db_lhost:3306/", account = "account", password = "nevermind", driver = "org.gjt.mm.mysql.driver", filename = "records.txt"; public static void main (string[] args) { try { // connect to db properties props = new properties(); props.setproperty("user", account); props.setproperty("password", password); class.forname(driver).newinstance(); connection con = drivermanager.getconnection( host + db, props); statement stmt = con.createstatement(); // open text file bufferedreader in = new bufferedreader( new filereader(filename)); // read and parse a line string line = in.readline(); while(line != null) { stringtokenizer tk = new stringtokenizer(line); string first = tk.nexttoken(), last = tk.nexttoken(), email = tk.nexttoken(), phone = tk.nexttoken(); // execute sql insert statement string query = "insert into " + table_name; query += " values(" + quote(first) + ", "; query += quote(last) + ", "; query += quote(email) + ", "; query += quote(phone) + ");"; stmt.executequery(query); // prepare to process next line line = in.readline(); } in.close(); } catch( exception e) { e.printstacktrace(); }

}

} procesando el conjunto de resultados

// protect data with quotes private static string quote(string include) { return("\"" + include + "\""); }

quizs ms a menudo que estar insertando los datos, usted podr extraer la informacin existente de su base de datos y utilizarla en su programa de java. la manera mas usual de implementarlo es con otro tipo de indagacin del sql, que selecciona un conjunto de filas y de columnas de su base de datos y se parece mucho a una tabla. las filas y columnas del conjunto del resultados sern aquel subconjunto de las tablas que usted busc, donde ciertos campos corresponden con sus parmetros. por ejemplo: select title from songs where artist="def leppard"; esta indagacin vuelve: ttulo hysteria la porcin del cuadro de arriba es un simple conjunto de resultados de una determinada de la base de datos. en un programa de java, esta declaracin o estado del sql puede ser ejecutado de la misma manera que en el ejemplo anterior, pero adems, debemos capturar los resultados en un objeto resultset. statement stmt = con.createstatement(); string query = "select from junk;"; // define query resultset answers = stmt.executequery(query); la versin de jdbc de un conjunto de resultados de la indagacin tiene un cursor que seala inicialmente la fila, justo antes de la primera fila. para avanzar el cursor, utilice el mtodo next(). si usted se sabe los nombres de las columnas de su conjunto de resultados, usted puede referirlos por su nombre. usted puede tambin referir a las columnas por nmero, comenzando con el 1. generalmente podr conseguir el acceso a todas las filas de su conjunto de resultados, usando un bucle como en el segmento de cdigo siguiente: while(answers.next()) { string name = answers.getstring("name"); int number = answers.getint("number"); // do something interesting } todos las tablas de la base de datos tienen meta datos que describen los nombres y los tipos de datos de cada columna; los conjuntos de resultados son la misma manera. usted puede utilizar resultsetmetadata class para conseguir los numeros y los nombres de las columnas, como aqui: resultsetmetadata meta = answers.getmetadata(); string[] colnames = new string[meta.getcolumncount()]; for (int col = 0; col < colnames.length; col++) colnames[col] = meta.getcolumnname(col + 1); ejemplo: imprimiendo una tabla de la base de datos elegimos escribir una herramienta simple de un software para mostrar las filas y las columnas de un tabla de la base de datos. en este caso, vamos a preguntar por una tabla de la base de datos con todos sus registros, y visualizamos el conjunto de resultados fijado a la lnea de comando. podramos tambin crear un grfico hecho con los componentes del java swing.

note que no sabemos nada, excepto el url y informacin de autentificacin de la tabla de la base de datos que vamos a visualizar. todo esta determinado por los resultset y sus meta datos. los comentarios en el cdigo explican las acciones del programa. aqu est el cdigo del programa del ejemplo: import java.sql.*; import java.util.*; public class databasetableviewer { private static final string db = "contacts", table_name = "records", host = "jdbc:mysql://db_host:3306/", account = "account", password = "nevermind", driver = "org.gjt.mm.mysql.driver"; public static void main (string[] args) { try { // authentication properties properties props = new properties(); props.setproperty("user", account); props.setproperty("password", password); // load driver and prepare to access class.forname(driver).newinstance(); connection con = drivermanager.getconnection( host + db, props); statement stmt = con.createstatement(); // execute select query string query = "select * from " + table_name + ";"; resultset table = stmt.executequery(query); // determine properties of table resultsetmetadata meta = table.getmetadata(); string[] colnames = new string[meta.getcolumncount()]; tabla[] cells = new tabla[colnames.length]; for( int col = 0; col < colnames.length; col++) { colnames[col] = meta.getcolumnname(col + 1); cells[col] = new tabla(); } // hold data from result set while(table.next()) { for(int col = 0; col < colnames.length; col++) { object cell = table.getobject(colnames[col]); cells[col].add(cell); } } // print column headings for(int col = 0; col < colnames.length; col++) system.out.print(colnames[col].touppercase() + "\t"); system.out.println();

}

// print data row-wise while(!cells[0].isempty()) { for(int col = 0; col < colnames.length; col++) system.out.print(cells[col].remove(0).tostring() + "\t"); system.out.println(); }

} } conclusiones en este artculo, usted vio una rpida introduccin a la manipulacin de las bases de datos con jdbc. las caractersticas ms avanzadas del jdbc requieren un mayor conocimiento acerca de las bases de datos. vea ms artculos de referencia acerca del jdbc y sus aplicaciones [ 4 ]. como programador de java, el jdbc es una buena herramienta a tener en su arsenal. le animo a que copie el cdigo en este artculo en su propio computador. con este artculo y documentacin para otro programa piloto de jdbc, usted est en su camino de crear programas de fuentes de datos conducida por java. experimente con este cdigo, y adptelo para conectar las fuentes de datos disponibles para usted. referencias 1 computerworld. java database connectivity por carol sliwa -http://www.computerworld.com/cwi/story/0,1199,nav47-68-85-98_sto43545,00.html 2 hoffman. tutorial de sql -- http://w3.one.net/~jhoffman/sqltut.htm 3 sun microsystems. jdbc data access api -http://java.sun.com/products/jdbc/index.html 4 sun microsystems. jdbc data access api: articles and success stories -http://java.sun.com/products/jdbc/articles.html 5 sun microsystems. jdbc data access api: drivers o programas pilotos-http://industry.java.sun.com/products/jdbc/drivers last modified: location: www.acm.org/crossroads/espanol/xrds7-3/ovp_marzo2001.html

// exit more gently catch(exception e) { e.printstacktrace(); }