JDBC: Conexiones con bases de datos desde Java



Documentos relacionados
JDBC: Conexiones con bases de datos desde Java

Acceso a bases de datos desde Java: JDBC

Acceso a bases de datos desde Java: JDBC

Diseño de la capa de datos. Acceso a datos con JDBC

APÉNDICE A: ACCESO A UNA BASE DE DATOS CON JDBC

Creación de proyectos usando Java/MySQL

Módulo 15. Introducción a JDBC, Java Database Connectivity. Programación Orientada a Objetos Página 16.0 de 25

JDBC. Curso 04/05. Tema 8 JDBC. Departament d Informàtica. Universitat de València. 1. Introducción Arquitecturas típicas...

- Compilar y ejecutar programas en Java - Estructura básica de una clase - El comando javac - El comando java - Introducción al IDE de desarrollo

Tutorial de incorporación del driver JDBC a Eclipse. Programación en Internet

JAVA 5. Conexión con Bases de Datos

Base de Datos JDBC. Unidad: 1 Laboratorio de Programación. Universidad Nacional de la Patagonia Austral Unidad Académica Río Gallegos

Desarrollo de Software con

Programación Orientada a Objetos II. La Plataforma JDBC

Práctica 3 Manejo de Base de Datos(Java-MySQL) desde consola

Bases de Datos usando Java : JDBC. Ing. César Julio Bustacara Medina

MySQL con Java en MS Windows

Práctica 2 ACCESO A BASES DE DATOS CON JDBC. 1. Creación de una base de datos en MySQL...1

Tópicos Avanzados de Programación (TAP3501)

PRÁCTICA Nº 16 CONEXIÓN A UNA BASE DE DATOS, INGRESO Y VISUALIZACIÓN DE REGISTROS

Java RMI. las RPC de Java. Parte I. Luis Fernando Llana Díaz. Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid

INTRODUCCIÓN. El objetivo de este manual es la identificación de los procesos técnicos más

Acceso a BDs en Java: JDBC

Java con Bases de Datos

JDBC. Una mini-introducci. introducción

JDBC. Aplicaciones Distribuidas

Lenguaje Java Avanzado

JDBC Julio Introducción JDBC Arquitecturas típicas con JDBC... 3

Guía práctica de introducción básica a JDBC

Integración de Java y MySQL utilizando MyBatis

NORMAS PARA LA ENTREGA DE LOS LABORATORIOS

JDBC. Francisco Javier Solans Benedí Software Developper

Java y MySQL. Ciclo de ejecución

USANDO SERVLETS EN UN SERVIDOR WEB RESIN

JDBC: Java DataBase Conectivity

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS

Bases de datos y JDBC

Especificaciones del driver JDBC

Practica 11: Conexión de Java con Bases de datos Access

10. JDBC. 10. JDBC Introducción. java.sql

Examen parcial Convocatoria de junio de 2005 FUNDAMENTOS DE LA PROGRAMACIÓN

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA

CONECTIVIDAD CON BASES DE DATOS

Práctica sobre compartición de instancias remotas.

C.I.F.: B Inscrita en el Registro Mercantil de Madrid, Tomo Libro 0, Folio 135, Sección 8. Hoja M Inscripción 1ª

Qué es JDBC? Cuatro tipos de drivers JDBC Uso de JDBC

Universidad Don Bosco. Materia: Programación Orientada a Objetos Contenido: Modificadores de Acceso y JDBC

PROGRAMACIÓN EN JAVA. { una línea para definir, crear o ejecutar ; }

Acceso a BD desde Java. JDBC

Creando CRUD en PHP: operaciones básicas para la gestión de bases de datos

Conexión JDBC. Tecnicatura Superior en Programación UTN-FRM Programación 3

Java y MySQL. Ciclo de ejecución

Laboratorios de BASES DE DATOS. (I.T. Informática)

Bases de Datos Introducción a la Conectividad de

Base de Datos JDBC. Unidad: 1 Laboratorio de Programación. Universidad Nacional de la Patagonia Austral Unidad Académica Río Gallegos

MultiBase. Notas a la versión 3.4. BASE 100, S.A.

Tabla: producto Campo: codigo varchar(13) Campo: nombre varchar(40) Campo: precio int Campo: unidades int PRIMARY KEY: codigo

Base de Datos Conjunto de información organizada especialmente para búsqueda y entrada de datos. Base de Datos: Ejemplo Usuarios

ARTE I BASE DE DATOS EN JAVA

Establecer una conexión con una base de datos o acceder a cualquier fuente de datos tabular Enviar enunciados SQL. Procesar los resultados

Java Servlets. Luis Fernando Llana Díaz. 17 de abril de Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid

Ejemplos de uso de ficheros de acceso secuencial

Desarrollo PHP con Webmatrix

El primer paso a realizar es crear la referencia JNDI para el origen de datos en el servidor local TomCat.

EJEMPLO 02 JPA Departamentos y Empleados Desarrollo de aplicación de empleados por departamento

JDBC: EL PUENTE ENTRE JAVA Y LAS BASES DE DATOS. En este articulo se expone la API JDBC (Java DataBase Connetivity), la cual permite el

Practica 7 Conexión a su base de datos. Optativa II

Conexión de Mysql con NetBeans

Acceso a bases de datos con JDBC

Esta aplicación se compone de 3 programas o clases, según el siguiente esquema: SueldoMedio.java. Sueldo.java

TUTORIAL CONEXIÓN SQLSERVER CON JAVA DESDE ECLIPSE

Capa de Gestión de Datos. Persistencia Bases de Datos - JDBC

LENGUAJE ESTRUCTURADO DE CONSULTAS SQL (2)

Transcripción:

Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y Computación Universidad Complutense de Madrid 0 de mayo de 00 JDBC Conexión con una fuentes de datos. Realizar peticiones y actualizaciones. Manejar los resultados de las consultas Aplicacion Java JDBC DBMS MySQL DBMS Oracle DBMS PostgresSQL

Drivers JDBC Es necesario un driver dependiente del proveedor de la Base de datos. MySQL MySQL java connector Creando la base de datos Fichero crea.sql create database valores ; use valores ; create table valores ( id int unsigned auto_increment primary key, nombre varchar (), ibex_id varchar (00), url varchar (), tipo enum (" acciones "," fondos ") ); create table datos ( id int unsigned auto_increment primary key, empresa int unsigned, fecha date, valor double ); grant all on valores.* to luis identified by ' patata '; 0 ~/ sql$ mysql -u root < crea.sql

Interfaz java.sql.connection Establece conexión con la base de datos. No tiene constructor. Es un interfaz (está implementado en el driver). Constuye instrucciones SQL precompiladas (método preparestatement). Realizando conexión con la base de datos package valores ; import java.sql. Connection ; import java.sql. DriverManager ; import java.sql. SQLException ; public class Conexion { protected static Connection getmysqlconnection ( String url, String db, String user, String passwd ) throws ClassNotFoundException, InstantiationException, 0 SQLException, IllegalAccessException { Class. forname (" com. mysql. jdbc. Driver " ). newinstance (); return DriverManager. getconnection (" jdbc : mysql :// "+url+"/"+db+ "? user ="+ user +"& password ="+ passwd ); protected static Connection getmysqlconnection () throws ClassNotFoundException, InstantiationException, SQLException, 0 IllegalAccessException { return getmysqlconnection (" localhost ", " valores ", " luis ", " patata " ); protected static String getfich ( String fich ) { java.net.url url = ClassLoader. getsystemresource ( fich ); return url. getpath ();

Ficheros de datos Fichero de valores: valores.csv BSCH BSCH acciones http :// www. bolsamadrid.es /esp / mercados / acciones / accind_.htm Endesa ENDESA acciones http :// www. bolsamadrid.es /esp / mercados / acciones / accind_.htm Repsol - YPF REPSOL YPF acciones http :// www. bolsamadrid.es /esp / mercados / acciones / accind_.htm Acciona ACCIONA acciones http :// www. bolsamadrid.es /esp / mercados / acciones / accind_.htm Inditex INDITEX acciones http :// www. bolsamadrid.es /esp / mercados / acciones / accind_.htm Teléfonica TELEFONICA acciones http :// www. bolsamadrid.es /esp / mercados / acciones / accind_.htm Banco Popular BA. POPULAR acciones http :// www. bolsamadrid.es /esp / mercados / acciones / accind_.htm Ebro - Puleva EBRO PULEVA acciones http :// www. bolsamadrid.es /esp / mercados / acciones / igbm.htm Mittal - Steel ARCELOR MIT. acciones http :// www. bolsamadrid.es /esp / mercados / acciones / igbm.htm Indra INDRA A acciones http :// www. bolsamadrid.es /esp / mercados / acciones / igbm.htm0 EADS EADS acciones http :// www. bolsamadrid.es /esp / mercados / acciones / igbm.htm Unipapel UNIPAPEL acciones http :// www. bolsamadrid.es /esp / mercados / acciones / igbm.htm Madrid Bolsa MADRID BOLSA fondos http :// www. bolsamadrid.es /esp / mercados / fondos / htmfondos /00 alfa.htm Plus Madrid PLUSMADRID fondos http :// www. bolsamadrid.es /esp / mercados / fondos / htmfondos /00 alfa.htm FonCaixa FONCAIXA BOLSA INDICE ESPA &#; A fondos http :// www. bolsamadrid.es /esp / mercados / fondos / htmfondos /00 alfa00.htm Cargar datos package valores ; import java.io. BufferedReader ; import java.io. FileReader ; import java.io. IOException ; import java.sql. Connection ; import java.sql. PreparedStatement ; import java.sql. SQLException ; import java. util. Scanner ; public class LeeValores { private static void insertadatos ( Connection con, BufferedReader in ) 0 throws IOException, SQLException {... public static void main ( String [] args ) throws Exception { Connection con = null ; BufferedReader in = null ; try { con = Conexion. getmysqlconnection (); in = new BufferedReader ( new FileReader ( Conexion. getfich (" sql / valores. csv " ))); insertadatos (con, in ); 0 finally { if (con!=null ) con. close (); if (in!=null ) in. close ();

¾Dónde está el chero sql/valores.csv?. -- -- sql -- borra. sql -- crea. sql -- datos. csv -- usuarios. csv `-- valores. csv -- src -- valores -- CVS -- Entries -- Repository `-- Root -- Conexion. java -- ConsigueDatos. java -- ConsigueDatos. java.~..~ -- LeeDatos. java `-- LeeValores. java -- classes `-- valores -- Conexion. class -- ConsigueDatos. class -- LeeDatos. class `-- LeeEmpresas. class 0 0 Accediendo sql/valores.csv Los objetos de clase ClassLoader permitend acceder a los recursos Java. java.net.url url = ClassLoader. getsystemresource ( fich ); fich debe estar dentro del CLASSPATH en la ejecución. ~/ Java$ export CLASSPATH =.:./ classes ~/ Java$ $JAVA_HOME /bin / java valores. LeeValores

Cargar datos private static final String sqlins = " insert into valores ( nombre, ibex_id,url, tipo ) "+ " values (?,?,?,?) "; private final static int NOMBRE =; private final static int IBEX_ID =; private final static int URL_BOLSA =; private final static int TIPO =; private static void insertadatos ( Connection con, BufferedReader in ) throws IOException, SQLException { 0 String linea = in. readline (); PreparedStatement pstmt = con. preparestatement ( sqlins ); while ( linea!= null ) { Scanner scan = new Scanner ( linea ); scan. usedelimiter (" " ); String nombre = scan. next (); String ibex_id = scan. next (); String tipo = scan. next (); String url = scan. next (); System.out. println ( nombre +":"+ ibex_id +":"+ tipo +":"+ url ); 0 pstmt. setstring (NOMBRE, nombre ); pstmt. setstring ( IBEX_ID, ibex_id ); pstmt. setstring (TIPO, tipo ); pstmt. setstring ( URL_BOLSA,url ); int n = pstmt. executeupdate (); linea=in. readline (); Ficheros de datos Fichero de valores: valores.csv Fecha BSCH ENDESA REPSOL - YPF ACCIONA INDITEX Telefónica Banco Popular Ebro - Puleva Mittal Steel INDRA AEDS Unipapel Madrid Bolsa PlusMadrid Fon Caixa /0/0..0.... 0/0/0..0.... /0/0.. 0....0. 0/0/0...0 0.0.0.... //0.0.....0.....0.. //0.... 0.......0... 0//0.0... 0........ 0.. //0.0.. 0. 0.......... //0... 0.0.....0.0.... //0....0 0.......00.0.0.. //0.... 0......00.0... 0/0/0.... 0......00.0... 0/0/0....0 0...........

Cargar datos private static void insertadatos ( Connection con, BufferedReader in ) throws IOException, SQLException, ParseException { int [] id_valores = valores ( con ); String linea = in. readline (); linea = in. readline (); String sql = " insert into datos (fecha,valor, precio ) values (?,?,? )"; PreparedStatement pstmt = con. preparestatement (sql ); while ( linea!= null ) { Scanner scan = new Scanner ( linea ); scan. usedelimiter (" " ); 0 String strfecha=scan. next (); if (! strfecha. equals ("" )) { DateFormat df = new SimpleDateFormat (" dd / MM / yy " ); Date fecha = df. parse ( strfecha ); System.out. println (df. format ( fecha )); for ( int i = 0; i < id_valores. length ; i ++) { String strvalor = scan. next (); if (! strvalor. equals ("" )) { double precio = Double. parsedouble ( strvalor ); pstmt. setdate (, new java.sql. Date ( fecha. gettime ())); 0 pstmt. setint (, id_valores [i ]); pstmt. setdouble (, precio ); int n = pstmt. executeupdate (); linea = in. readline (); Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid 0 Cargar datos private static String [] valores = { " BSCH "," ENDESA "," REPSOL YPF ", " ACCIONA "," INDITEX "," TELEFONICA ", "BA. POPULAR "," EBRO PULEVA "," ARCELOR MIT.", " INDRA A"," EADS "," UNIPAPEL "," MADRID BOLSA ", " PLUSMADRID "," FONCAIXA BOLSA INDICE ESPA &#; A" ; private static int [] valores ( Connection con ) throws SQLException { int [] ids = new int [ valores. length ]; String sql = " select id from valores where ibex_id like?"; PreparedStatement pstmt = con. preparestatement (sql ); for ( int i = 0; i < ids. length ; i ++) { pstmt. setstring (, valores [i ]); ResultSet rs = pstmt. executequery (); rs. next (); ids [i ]=rs. getint (); return ids ; 0

Realizar actualizaciones Instrucciones: INSERT, UPDATE, DELETE public static void pr ( Connection con ) throws SQLException { String sql = " update datos set precio=precio + "; PreparedStatement pstmt = con. preparestatement (sql ); int n = pstmt. executeupdate (); System.out. println (n+" filas actualizadas " ); SQLWarning warning = pstmt. getwarnings (); if ( warning!= null ) { System. out. println (" AVISOS... " ); while ( warning!= null ) { System.out. println (" Message : " + warning. getmessage ()); warning = warning. getnextwarning (); else { System.out. println ("No hay avisos " ); 0 Realizar Consultas Instrucciones Select select id,nombre, tipo from valores ResultSet rs = pstmt.executequery(); rs.next(); rs id nombre tipo rs BSCH acciones rs Endesa acciones rs Repsol-YPF acciones rs Acciona acciones rs Inditex acciones rs Telefónica acciones

Ejemplos de consultas I public static void pr ( Connection con ) throws SQLException { String sql = " select * from valores "; PreparedStatement pstmt = con. preparestatement (sql ); ResultSet rs = pstmt. executequery (); while ( rs. next ()) { int id = rs. getint ("id " ); String nombre = rs. getstring (" nombre " ); System.out. println (id +":"+ nombre ); 0 Ejemplos de consultas II public static void pr ( Connection con ) throws SQLException { String sql = " select valores. nombre, datos.fecha, datos. precio "+ " from datos left join valores on valores.id = datos. valor "+ " where datos. fecha >= '00-0 -0 ' "+ " order by valores.tipo, valores. nombre, datos. fecha "; PreparedStatement pstmt = con. preparestatement (sql ); ResultSet rs = pstmt. executequery (); while ( rs. next ()) { String nombre = rs. getstring (" valores. nombre " ); Date fecha = rs. getdate (" datos. fecha " ); 0 double precio = rs. getdouble (" datos. precio " ); DateFormat df = new SimpleDateFormat (" dd 'de ' MMMM 'de ' yyy " ); NumberFormat nf = new DecimalFormat (" #,000.00 'e'" ); System.out. println (df. format ( fecha )+ "\t"+nombre+"\t"+nf. format ( precio ));

Ejemplos de consultas III public static int getid ( String ibex_id, Connection con ) throws SQLException { String sql = " select id from valores where ibex_id like '"+ibex_id +" '"; PreparedStatement pstmt = con. preparestatement (sql ); ResultSet rs = pstmt. executequery (); if ( rs. next ()) { return rs. getint (); else { return -; 0 Consiguiendo datos desde www.bolsamadrid.es Conseguir el chero HTML. Analizar el chero. Añadir datos en la base de datos.

Conseguir el chero HTML Fichero de valores: valores.csv BSCH BSCH acciones http :// www. bolsamadrid.es /esp / mercados / acciones / accind_.htm Endesa ENDESA acciones http :// www. bolsamadrid.es /esp / mercados / acciones / accind_.htm private static String cargapagina ( java.net.url url ) throws IOException { InputStream in = url. openstream (); StringBuffer sb = new StringBuffer (); int c = in. read (); while (c!= -) { sb. append (( char )c ); c = in. read (); String res = sb. tostring (); return res ; 0 Analizar el chero HTML Fichero de valores: http://www.bolsamadrid.es/esp/mercados/acciones/accind_.htm...... <IMG SRC="/ images /arr -up. gif " BORDER =0> BSCH</A></TD><TD>,0</TD>......... <IMG SRC="/ images /arr -dw. gif " BORDER =0> ENDESA</A></TD><TD>0,</TD>... private static double getvalor ( String ibex_id, String datos, String tipo ) throws ParseException { String regexp = null ; if ( tipo. equals (" acciones " )) { regexp=ibex_id+" *</A></TD ><TD >([0 -,]+) </TD >"; else if (tipo. equals (" fondos " )) { regexp=ibex_id+" *</a></td >.*? <TD *[^ >]* >([0 -,]+) </TD >"; else { throw new RuntimeException (" Tipo \'"+ tipo +"\' desconocido " ); 0 Pattern p = Pattern. compile ( regexp ); Matcher m = p. matcher ( datos ); if (m. find ()) { // Double. parsedouble no vale, no analiza,0 NumberFormat nf = NumberFormat. getinstance (); return nf. parse (m. group ()). doublevalue (); else { throw new RuntimeException (" Acciones \'"+ ibex_id +"\' no encontrada " ); 0

Insertar los datos en la Base de datos private static final String sqlins = " insert into datos ( fecha, valor, precio ) values (?,?,?) "; private static final int FECHA =; private static final int VALOR =; private static final int PRECIO =; private static void insertadatos ( java.sql. Date fecha, Connection con ) throws SQLException, IOException, ParseException { HashMap <String, String > paginas = new HashMap <String, String >(); String sql = " select * from valores "; PreparedStatement pstmtvalores = con. preparestatement (sql ); ResultSet rs = pstmtvalores. executequery (); PreparedStatement pstmtins = con. preparestatement ( sqlins ); while ( rs. next ()) { insertadatos ( pstmtins, fecha, rs, paginas ); 0 Insertar los datos en la Base de datos private static void insertadatos ( PreparedStatement pstmtins, java.sql. Date fecha, ResultSet rs, HashMap <String, String > paginas ) throws SQLException, IOException, ParseException { String url = rs. getstring (" url " ); String datos = paginas. get ( url ); if ( datos == null ) { datos = cargapagina ( paginas,url )); paginas.put (url, datos ); String tipo = rs. getstring (" tipo " ); String ibex_id = rs. getstring (" ibex_id " ); double valor = getvalor ( ibex_id,datos, tipo ); int id = rs. getint ("id " ); String nombre = rs. getstring (" nombre " ); pstmtins. setdate (FECHA, fecha ); pstmtins. setint (VALOR,id ); pstmtins. setdouble (PRECIO, valor ); int n = pstmtins. executeupdate (); 0 0

Consiguiendo datos automáticamente #!/ bin / sh # $Id : transparencias. tex,v. 00-0 -0 :: luis Exp $ JAVA_HOME =/ opt / java / jdk. CLASSPATH =/ home / casa / ahorros / classes $JAVA_HOME /bin / java -cp $CLASSPATH valores. ConsigueDatos $* $ crontab -l SHELL =/ bin / bash MAILTO = luis # Directorios donde buscar programas PATH =/ bin :/ usr /bin :/ usr / XR /bin :/ usr / local /bin :/ home / luis /bin * *,,,, /home / casa / ahorros / scripts / consiguedatos.sh > /dev / null >&