JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010....

32

Transcript of JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010....

Page 1: JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010. 7. 29. · JDBC: Conexiones con bases de datos desde Java Luis Fernando Llana Díaz

JDBC: Conexiones con bases de datos desde Java

Luis Fernando Llana Díaz

Departamento de Sistemas Informáticos y Computación

Universidad Complutense de Madrid

10 de mayo de 2007

Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

JDBC: Conexiones con bases de datos desde Java

Page 2: JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010. 7. 29. · JDBC: Conexiones con bases de datos desde Java Luis Fernando Llana Díaz

JDBC

Conexión con una fuentes de datos.

Realizar peticiones y actualizaciones.

Manejar los resultados de las consultas

DBMS

PostgresSQL

DBMS

OracleMySQL

DBMS

Aplicacion Java

JDBC

Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

JDBC: Conexiones con bases de datos desde Java

Page 3: JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010. 7. 29. · JDBC: Conexiones con bases de datos desde Java Luis Fernando Llana Díaz

Drivers JDBC

Es necesario un driver dependiente del proveedor de la Base de

datos.

MySQL MySQL java connector

Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

JDBC: Conexiones con bases de datos desde Java

Page 4: JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010. 7. 29. · JDBC: Conexiones con bases de datos desde Java Luis Fernando Llana Díaz

Creando la base de datos

Fichero crea.sql

1create database valores;2use valores;3

4create table valores (5id int unsigned auto_increment primary key ,6nombre varchar (255),7ibex_id varchar (100),8url varchar (255),9tipo enum("acciones","fondos")10);11

12create table datos (13id int unsigned auto_increment primary key ,14empresa int unsigned ,15fecha date ,16valor double17);18

19grant all on valores .* to luis identified by 'patata ';

1~/sql$ mysql -u root < crea.sql

Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

JDBC: Conexiones con bases de datos desde Java

Page 5: JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010. 7. 29. · JDBC: Conexiones con bases de datos desde Java Luis Fernando Llana Díaz

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).

Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

JDBC: Conexiones con bases de datos desde Java

Page 6: JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010. 7. 29. · JDBC: Conexiones con bases de datos desde Java Luis Fernando Llana Díaz

Realizando conexión con la base de datos

1package valores;2import java.sql.Connection;3import java.sql.DriverManager;4import java.sql.SQLException;5

6public class Conexion {7protected static Connection getMysqlConnection(String url , String db ,8String user , String passwd)9throws ClassNotFoundException ,10InstantiationException ,11SQLException ,12IllegalAccessException {13Class.forName("com.mysql.jdbc.Driver"). newInstance ();14return DriverManager.getConnection("jdbc:mysql ://"+url+"/"+db+15"?user="+user+"&password="+passwd );16}17protected static Connection getMysqlConnection ()18throws ClassNotFoundException ,19InstantiationException ,20SQLException ,21IllegalAccessException {22return getMysqlConnection("localhost", "valores", "luis", "patata");23}24protected static String getFich(String fich) {25java.net.URL url = ClassLoader.getSystemResource(fich);26return url.getPath ();27}28}

Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

JDBC: Conexiones con bases de datos desde Java

Page 7: JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010. 7. 29. · JDBC: Conexiones con bases de datos desde Java Luis Fernando Llana Díaz

Ficheros de datos

Fichero de valores: valores.csv

1BSCH ·BSCH ·acciones ·http :// www.bolsamadrid.es/esp/mercados/acciones/accind1_1.htm2Endesa ·ENDESA ·acciones ·http :// www.bolsamadrid.es/esp/mercados/acciones/accind1_1.htm3Repsol - YPF·REPSOL YPF ·acciones ·http :// www.bolsamadrid.es/esp/mercados/acciones/accind1_1.htm4Acciona ·ACCIONA ·acciones ·http :// www.bolsamadrid.es/esp/mercados/acciones/accind1_1.htm5Inditex ·INDITEX ·acciones ·http :// www.bolsamadrid.es/esp/mercados/acciones/accind1_1.htm6Teléfonica ·TELEFONICA ·acciones ·http :// www.bolsamadrid.es/esp/mercados/acciones/accind1_1.htm7Banco Popular·BA . POPULAR ·acciones ·http :// www.bolsamadrid.es/esp/mercados/acciones/accind1_1.htm8Ebro - Puleva·EBRO PULEVA ·acciones ·http :// www.bolsamadrid.es/esp/mercados/acciones/igbm_3_1.htm9Mittal - Steel·ARCELOR MIT. ·acciones ·http :// www.bolsamadrid.es/esp/mercados/acciones/igbm_2_1.htm10Indra·INDRA A ·acciones ·http :// www.bolsamadrid.es/esp/mercados/acciones/igbm_6_1.htm11EADS ·EADS ·acciones ·http :// www.bolsamadrid.es/esp/mercados/acciones/igbm_2_1.htm12Unipapel ·UNIPAPEL ·acciones ·http :// www.bolsamadrid.es/esp/mercados/acciones/igbm_3_1.htm13Madrid Bolsa·MADRID BOLSA ·fondos ·http :// www.bolsamadrid.es/esp/mercados/fondos/htmfondos /0085 alfa.htm14Plus Madrid ·PLUSMADRID ·fondos ·http :// www.bolsamadrid.es/esp/mercados/fondos/htmfondos /0085 alfa.htm15FonCaixa 65 ·FONCAIXA 65 BOLSA INDICE ESPA &#241; A ·fondos ·http :// www.bolsamadrid.es/esp/mercados/fondos/htmfondos /0015 alfa100.htm

Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

JDBC: Conexiones con bases de datos desde Java

Page 8: JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010. 7. 29. · JDBC: Conexiones con bases de datos desde Java Luis Fernando Llana Díaz

Cargar datos

1package valores;2import java.io.BufferedReader;3import java.io.FileReader;4import java.io.IOException;5import java.sql.Connection;6import java.sql.PreparedStatement;7import java.sql.SQLException;8import java.util.Scanner;9public class LeeValores {10private static void insertaDatos(Connection con , BufferedReader in)11throws IOException , SQLException {12.....................13}14public static void main (String [] args) throws Exception {15Connection con = null;16BufferedReader in = null;17try {18con = Conexion.getMysqlConnection ();19in = new BufferedReader(new FileReader(Conexion.getFich("sql/valores.csv")));20insertaDatos(con ,in);21} finally {22if (con!=null) con.close ();23if (in!=null) in.close ();24}25}26}

Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

JDBC: Conexiones con bases de datos desde Java

Page 9: JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010. 7. 29. · JDBC: Conexiones con bases de datos desde Java Luis Fernando Llana Díaz

¾Dónde está el �chero sql/valores.csv?

1.2|-- |-- sql3| |-- borra.sql4| |-- crea.sql5| |-- datos.csv6| |-- usuarios.csv7| `-- valores.csv8|-- src9| |-- valores10| | |-- CVS11| | | |-- Entries12| | | |-- Repository13| | | `-- Root14| | |-- Conexion.java15| | |-- ConsigueDatos.java16| | |-- ConsigueDatos.java .~1.1.~17| | |-- LeeDatos.java18| | `-- LeeValores.java19|-- classes20| `-- valores21| |-- Conexion.class22| |-- ConsigueDatos.class23| |-- LeeDatos.class24| `-- LeeEmpresas.class

Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

JDBC: Conexiones con bases de datos desde Java

Page 10: JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010. 7. 29. · JDBC: Conexiones con bases de datos desde Java Luis Fernando Llana Díaz

Accediendo sql/valores.csv

Los objetos de clase ClassLoader permitend acceder a los recursos

Java.

1java.net.URL url = ClassLoader.getSystemResource(fich);

fich debe estar dentro del CLASSPATH en la ejecución.

1~/Java$ export CLASSPATH =.:./ classes2~/Java$ $JAVA_HOME/bin/java valores.LeeValores

Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

JDBC: Conexiones con bases de datos desde Java

Page 11: JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010. 7. 29. · JDBC: Conexiones con bases de datos desde Java Luis Fernando Llana Díaz

Cargar datos

1private static final String sqlIns =2"insert into valores (nombre ,ibex_id ,url ,tipo) "+3"values ( ? , ? , ? , ?)";4private final static int NOMBRE =1;5private final static int IBEX_ID =2;6private final static int URL_BOLSA =3;7private final static int TIPO =4;8

9private static void insertaDatos(Connection con , BufferedReader in)10throws IOException , SQLException {11String linea = in.readLine ();12PreparedStatement pstmt = con.prepareStatement(sqlIns );13while (linea !=null) {14Scanner scan = new Scanner(linea );15scan.useDelimiter(" · ");16String nombre = scan.next ();17String ibex_id = scan.next ();18String tipo = scan.next ();19String url = scan.next ();20System.out.println(nombre+":"+ibex_id+":"+tipo+":"+url);21pstmt.setString(NOMBRE ,nombre );22pstmt.setString(IBEX_ID ,ibex_id );23pstmt.setString(TIPO ,tipo);24pstmt.setString(URL_BOLSA ,url);25int n = pstmt.executeUpdate ();26linea=in.readLine ();27}28}

Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

JDBC: Conexiones con bases de datos desde Java

Page 12: JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010. 7. 29. · JDBC: Conexiones con bases de datos desde Java Luis Fernando Llana Díaz

Ficheros de datos

Fichero de valores: valores.csv

1Fecha ·BSCH ·ENDESA ·REPSOL - YPF ·ACCIONA ·INDITEX ·Telefónica ·Banco Popular·Ebro - Puleva·Mittal Steel ·INDRA ·AEDS ·Unipapel ·Madrid Bolsa ·PlusMadrid ·Fon Caixa 65228/03/02 ·9 .6 ·17 .05 ·14 .45 · · · · · · · · · · 1 2 .35 ·17 .33 ·5 .49301/04/02 ·9 .6 ·17 .05 ·14 .45 · · · · · · · · · · 1 2 .35 ·17 .33 ·5 .494· · · · · · · · · · · · · · ·527/08/04 ·8 ·15 .25 ·16 .98 ·50 .15 ·19 ·11 .83 · · · · · · · 1 1 .81 ·17 .03 ·4 .64630/08/04 ·7 .99 ·15 .29 ·17 .03 ·50 .05 ·19 .08 ·11 .78 · · · · · · · 1 1 .89 ·17 .1 ·4 .66712/12/06 ·14 .01 ·35 .76 ·27 .71 ·137 .95 ·39 .59 ·16 .06 ·13 .7 ·18 .62 ·31 .5 ·18 .35 · · · 2 1 .08 ·25 .22 ·8 .158· · · · · · · · · · · · · · ·919/12/06 ·13 .98 ·35 .15 ·26 .96 ·138 .2 ·40 .78 ·16 .11 ·13 .7 ·19 .17 ·31 .25 ·18 .15 ·24 .20 · ·21 .51 ·25 .57 ·8 .351020/12/06 ·14 .08 ·35 .16 ·26 .92 ·139 .9 ·40 .95 ·16 .28 ·13 .68 ·19 .28 ·31 .86 ·18 .42 ·25 .45 · ·21 .4 ·25 .47 ·8 .371121/12/06 ·14 .06 ·35 .43 ·26 .6 ·140 .9 ·40 .61 ·16 .15 ·13 .65 ·19 .25 ·31 .86 ·18 .46 ·25 .79 · ·21 .2 ·25 .29 ·8 .3312· · · · · · · · · · · · · · ·1327/12/06 ·14 .16 ·35 .72 ·26 .5 ·140 ·41 .01 ·16 .2 ·13 .69 ·19 .59 ·31 .95 ·19 .06 ·26 .07 ·21 .34 ·21 .16 ·25 .25 ·8 .261428/12/06 ·14 .12 ·35 .55 ·26 .41 ·141 .05 ·40 .89 ·16 .16 ·13 .68 ·19 .12 ·32 .26 ·18 .67 ·26 .00 ·21 .40 ·21 .05 ·25 .14 ·8 .181529/12/06 ·14 .14 ·35 .83 ·26 .2 ·141 .1 ·40 .81 ·16 .12 ·13 .73 ·19 .2 ·32 ·18 .61 ·26 .00 ·21 .50 ·21 .23 ·25 .3 ·8 .181601/01/07 ·14 .14 ·35 .83 ·26 .2 ·141 .1 ·40 .81 ·16 .12 ·13 .73 ·19 .2 ·32 ·18 .61 ·26 .00 ·21 .50 ·21 .18 ·25 .24 ·8 .181702/01/07 ·14 .49 ·35 .57 ·26 .63 ·143 .05 ·40 .79 ·16 .39 ·13 .97 ·19 .46 ·32 .87 ·18 .88 ·26 .29 ·21 .85 ·21 .18 ·25 .24 ·8 .18

Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

JDBC: Conexiones con bases de datos desde Java

Page 13: JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010. 7. 29. · JDBC: Conexiones con bases de datos desde Java Luis Fernando Llana Díaz

Cargar datos

1private static void insertaDatos(Connection con , BufferedReader in)2throws IOException , SQLException , ParseException {3int [] id_valores = valores(con);4String linea = in.readLine ();5linea = in.readLine ();6String sql = "insert into datos (fecha ,valor ,precio) values ( ?, ? , ? )";7PreparedStatement pstmt = con.prepareStatement(sql);8while (linea !=null) {9Scanner scan = new Scanner(linea );10scan.useDelimiter(" · ");11String strFecha=scan.next ();12if (! strFecha.equals("")) {13DateFormat df = new SimpleDateFormat("dd/MM/yy");14Date fecha = df.parse(strFecha );15System.out.println(df.format(fecha ));16for (int i = 0; i < id_valores.length ; i++) {17String strValor = scan.next ();18if (! strValor.equals("")) {19double precio = Double.parseDouble(strValor );20pstmt.setDate(1,new java.sql.Date(fecha.getTime ()));21pstmt.setInt(2, id_valores[i]);22pstmt.setDouble (3,precio );23int n = pstmt.executeUpdate ();24}25

26}27}28linea = in.readLine ();29}30}

Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

JDBC: Conexiones con bases de datos desde Java

Page 14: JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010. 7. 29. · JDBC: Conexiones con bases de datos desde Java Luis Fernando Llana Díaz

Cargar datos

1private static String [] valores = {2"BSCH","ENDESA","REPSOL YPF",3"ACCIONA","INDITEX","TELEFONICA",4"BA.POPULAR","EBRO PULEVA","ARCELOR MIT.",5"INDRA A","EADS","UNIPAPEL","MADRID BOLSA",6"PLUSMADRID","FONCAIXA 65 BOLSA INDICE ESPA &#241;A"7};8private static int [] valores(Connection con) throws SQLException {9int [] ids = new int[valores.length ];10String sql = "select id from valores where ibex_id like ?";11PreparedStatement pstmt = con.prepareStatement(sql);12for (int i = 0; i < ids.length; i++) {13pstmt.setString (1,valores[i]);14ResultSet rs = pstmt.executeQuery ();15rs.next ();16ids[i]=rs.getInt (1);17}18return ids;19}

Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

JDBC: Conexiones con bases de datos desde Java

Page 15: JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010. 7. 29. · JDBC: Conexiones con bases de datos desde Java Luis Fernando Llana Díaz

Realizar actualizaciones

Instrucciones: INSERT, UPDATE, DELETE

1public static void pr2(Connection con) throws SQLException {2String sql = "update datos set precio=precio +1";3PreparedStatement pstmt = con.prepareStatement(sql);4int n = pstmt.executeUpdate ();5System.out.println(n+" filas actualizadas");6SQLWarning warning = pstmt.getWarnings ();7if (warning !=null) {8System.out.println("AVISOS ...");9while (warning !=null) {10System.out.println("Message: " + warning.getMessage ());11warning = warning.getNextWarning ();12}13} else {14System.out.println("No hay avisos");15}16}

Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

JDBC: Conexiones con bases de datos desde Java

Page 16: JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010. 7. 29. · JDBC: Conexiones con bases de datos desde Java Luis Fernando Llana Díaz

Realizar Consultas

Instrucciones Select

1select id ,nombre ,tipo from valores

ResultSet rs = pstmt.executeQuery();

rs.next();

rs id nombre tipo

rs

1 BSCH acciones

rs

2 Endesa acciones

rs

3 Repsol-YPF acciones

rs

4 Acciona acciones

rs

5 Inditex acciones

rs

6 Telefónica acciones

Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

JDBC: Conexiones con bases de datos desde Java

Page 17: JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010. 7. 29. · JDBC: Conexiones con bases de datos desde Java Luis Fernando Llana Díaz

Realizar Consultas

Instrucciones Select

1select id ,nombre ,tipo from valores

ResultSet rs = pstmt.executeQuery();

rs.next();

rs

id nombre tipo

rs 1 BSCH acciones

rs

2 Endesa acciones

rs

3 Repsol-YPF acciones

rs

4 Acciona acciones

rs

5 Inditex acciones

rs

6 Telefónica acciones

Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

JDBC: Conexiones con bases de datos desde Java

Page 18: JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010. 7. 29. · JDBC: Conexiones con bases de datos desde Java Luis Fernando Llana Díaz

Realizar Consultas

Instrucciones Select

1select id ,nombre ,tipo from valores

ResultSet rs = pstmt.executeQuery();

rs.next();

rs

id nombre tipo

rs

1 BSCH acciones

rs 2 Endesa acciones

rs

3 Repsol-YPF acciones

rs

4 Acciona acciones

rs

5 Inditex acciones

rs

6 Telefónica acciones

Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

JDBC: Conexiones con bases de datos desde Java

Page 19: JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010. 7. 29. · JDBC: Conexiones con bases de datos desde Java Luis Fernando Llana Díaz

Realizar Consultas

Instrucciones Select

1select id ,nombre ,tipo from valores

ResultSet rs = pstmt.executeQuery();

rs.next();

rs

id nombre tipo

rs

1 BSCH acciones

rs

2 Endesa acciones

rs 3 Repsol-YPF acciones

rs

4 Acciona acciones

rs

5 Inditex acciones

rs

6 Telefónica acciones

Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

JDBC: Conexiones con bases de datos desde Java

Page 20: JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010. 7. 29. · JDBC: Conexiones con bases de datos desde Java Luis Fernando Llana Díaz

Realizar Consultas

Instrucciones Select

1select id ,nombre ,tipo from valores

ResultSet rs = pstmt.executeQuery();

rs.next();

rs

id nombre tipo

rs

1 BSCH acciones

rs

2 Endesa acciones

rs

3 Repsol-YPF acciones

rs 4 Acciona acciones

rs

5 Inditex acciones

rs

6 Telefónica acciones

Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

JDBC: Conexiones con bases de datos desde Java

Page 21: JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010. 7. 29. · JDBC: Conexiones con bases de datos desde Java Luis Fernando Llana Díaz

Realizar Consultas

Instrucciones Select

1select id ,nombre ,tipo from valores

ResultSet rs = pstmt.executeQuery();

rs.next();

rs

id nombre tipo

rs

1 BSCH acciones

rs

2 Endesa acciones

rs

3 Repsol-YPF acciones

rs

4 Acciona acciones

rs 5 Inditex acciones

rs

6 Telefónica acciones

Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

JDBC: Conexiones con bases de datos desde Java

Page 22: JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010. 7. 29. · JDBC: Conexiones con bases de datos desde Java Luis Fernando Llana Díaz

Realizar Consultas

Instrucciones Select

1select id ,nombre ,tipo from valores

ResultSet rs = pstmt.executeQuery();

rs.next();

rs

id nombre tipo

rs

1 BSCH acciones

rs

2 Endesa acciones

rs

3 Repsol-YPF acciones

rs

4 Acciona acciones

rs

5 Inditex acciones

rs 6 Telefónica acciones

Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

JDBC: Conexiones con bases de datos desde Java

Page 23: JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010. 7. 29. · JDBC: Conexiones con bases de datos desde Java Luis Fernando Llana Díaz

Realizar Consultas

Instrucciones Select

1select id ,nombre ,tipo from valores

ResultSet rs = pstmt.executeQuery();

rs.next();

rs

id nombre tipo

rs

1 BSCH acciones

rs

2 Endesa acciones

rs

3 Repsol-YPF acciones

rs

4 Acciona acciones

rs

5 Inditex acciones

rs

6 Telefónica acciones

Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

JDBC: Conexiones con bases de datos desde Java

Page 24: JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010. 7. 29. · JDBC: Conexiones con bases de datos desde Java Luis Fernando Llana Díaz

Ejemplos de consultas I

1public static void pr1(Connection con) throws SQLException {2String sql = "select * from valores";3PreparedStatement pstmt = con.prepareStatement(sql);4ResultSet rs = pstmt.executeQuery ();5while (rs.next ()) {6int id = rs.getInt("id");7String nombre = rs.getString("nombre");8System.out.println(id+":"+nombre );9}10}

Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

JDBC: Conexiones con bases de datos desde Java

Page 25: JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010. 7. 29. · JDBC: Conexiones con bases de datos desde Java Luis Fernando Llana Díaz

Ejemplos de consultas II

1public static void pr3(Connection con) throws SQLException {2String sql = "select valores.nombre , datos.fecha , datos.precio "+3" from datos left join valores on valores.id=datos.valor "+4" where datos.fecha >='2007-03-01'"+5" order by valores.tipo , valores.nombre , datos.fecha";6PreparedStatement pstmt = con.prepareStatement(sql);7ResultSet rs = pstmt.executeQuery ();8while (rs.next ()) {9String nombre = rs.getString("valores.nombre");10Date fecha = rs.getDate("datos.fecha");11double precio = rs.getDouble("datos.precio");12DateFormat df = new SimpleDateFormat("dd 'de' MMMM 'de' yyy");13NumberFormat nf = new DecimalFormat("# ,000.00'e'");14System.out.println(df.format(fecha )+"\t"+nombre+"\t"+nf.format(precio ));15}16}

Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

JDBC: Conexiones con bases de datos desde Java

Page 26: JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010. 7. 29. · JDBC: Conexiones con bases de datos desde Java Luis Fernando Llana Díaz

Ejemplos de consultas III

1public static int getID(String ibex_id , Connection con) throws SQLException {2String sql = "select id from valores where ibex_id like '"+ibex_id+"'";3PreparedStatement pstmt = con.prepareStatement(sql);4ResultSet rs = pstmt.executeQuery ();5if (rs.next ()) {6return rs.getInt (1);7} else {8return -1;9}10}

Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

JDBC: Conexiones con bases de datos desde Java

Page 27: JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010. 7. 29. · JDBC: Conexiones con bases de datos desde Java Luis Fernando Llana Díaz

Consiguiendo datos desde www.bolsamadrid.es

Conseguir el �chero HTML.

Analizar el �chero.

Añadir datos en la base de datos.

Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

JDBC: Conexiones con bases de datos desde Java

Page 28: JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010. 7. 29. · JDBC: Conexiones con bases de datos desde Java Luis Fernando Llana Díaz

Conseguir el �chero HTML

Fichero de valores: valores.csv

1BSCH ·BSCH ·acciones ·http :// www.bolsamadrid.es/esp/mercados/acciones/accind1_1.htm2Endesa ·ENDESA ·acciones ·http :// www.bolsamadrid.es/esp/mercados/acciones/accind1_1.htm

1private static String cargaPagina(java.net.URL url)2throws IOException{3InputStream in = url.openStream ();4StringBuffer sb = new StringBuffer ();5int c = in.read ();6while (c!=-1) {7sb.append ((char)c);8c = in.read ();9}10String res = sb.toString ();11return res;12}

Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

JDBC: Conexiones con bases de datos desde Java

Page 29: JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010. 7. 29. · JDBC: Conexiones con bases de datos desde Java Luis Fernando Llana Díaz

Analizar el �chero HTML

Fichero de valores:

http://www.bolsamadrid.es/esp/mercados/acciones/accind1_1.htm

1.....................2....<IMG SRC="/images/arr -up9.gif" BORDER =0> BSCH</A></TD><TD>13,50</TD>.....3.....................4....<IMG SRC="/images/arr -dw9.gif" BORDER =0> ENDESA </A></TD><TD>40,29</TD>...

1private static double getValor(String ibex_id , String datos , String tipo)2throws ParseException {3String regExp=null;4if (tipo.equals("acciones")) {5regExp=ibex_id+" *</A></TD ><TD >([0-9,]+) </TD>";6} else if (tipo.equals("fondos")) {7regExp=ibex_id+" *</a></TD >.*?<TD *[^>]*>([0-9,]+) </TD>";8} else {9throw new RuntimeException("Tipo \'"+tipo+"\' desconocido");10}11Pattern p = Pattern.compile(regExp );12Matcher m = p.matcher(datos );13if (m.find ()) {14// Double.parseDouble no vale , no analiza 13,50

15NumberFormat nf = NumberFormat.getInstance ();16return nf.parse(m.group (1)). doubleValue ();17} else {18throw new RuntimeException("Acciones \'"+ibex_id+"\' no encontrada");19}20}

Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

JDBC: Conexiones con bases de datos desde Java

Page 30: JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010. 7. 29. · JDBC: Conexiones con bases de datos desde Java Luis Fernando Llana Díaz

Insertar los datos en la Base de datos

1private static final String sqlIns =2"insert into datos (fecha ,valor ,precio) values( ? , ? , ?)";3private static final int FECHA =1;4private static final int VALOR =2;5private static final int PRECIO =3;6

7private static void insertaDatos(java.sql.Date fecha ,Connection con)8throws SQLException , IOException , ParseException {9HashMap <String ,String > paginas = new HashMap <String ,String >();10String sql = "select * from valores";11PreparedStatement pstmtValores = con.prepareStatement(sql);12ResultSet rs = pstmtValores.executeQuery ();13PreparedStatement pstmtIns = con.prepareStatement(sqlIns );14while (rs.next ()) {15insertaDatos(pstmtIns ,16fecha ,17rs ,paginas );18}19}

Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

JDBC: Conexiones con bases de datos desde Java

Page 31: JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010. 7. 29. · JDBC: Conexiones con bases de datos desde Java Luis Fernando Llana Díaz

Insertar los datos en la Base de datos

1private static void insertaDatos(PreparedStatement pstmtIns ,2java.sql.Date fecha ,3ResultSet rs ,4HashMap <String ,String > paginas)5throws SQLException ,IOException , ParseException {6String url = rs.getString("url");7String datos = paginas.get(url);8if (datos ==null) {9datos = cargaPagina(paginas ,url ));10paginas.put(url ,datos );11}12String tipo = rs.getString("tipo");13String ibex_id = rs.getString("ibex_id");14double valor = getValor(ibex_id ,datos ,tipo);15int id = rs.getInt("id");16String nombre = rs.getString("nombre");17pstmtIns.setDate(FECHA ,fecha );18pstmtIns.setInt(VALOR ,id);19pstmtIns.setDouble(PRECIO ,valor );20int n = pstmtIns.executeUpdate ();21}

Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

JDBC: Conexiones con bases de datos desde Java

Page 32: JDBC: Conexiones con bases de datos desde Javaantares.sip.ucm.es/luis/Java06-07/JDBC.pdf · 2010. 7. 29. · JDBC: Conexiones con bases de datos desde Java Luis Fernando Llana Díaz

Consiguiendo datos automáticamente

1#!/bin/sh

2# $Id: transparencias.tex ,v 1.8 2007 -05 -10 11:37:22 luis Exp $

3

4JAVA_HOME =/opt/java/jdk1.55CLASSPATH =/home/casa/ahorros2/classes6$JAVA_HOME/bin/java -cp $CLASSPATH valores.ConsigueDatos $*

1$ crontab -l2

3SHELL =/bin/bash4MAILTO=luis5# Directorios donde buscar programas6PATH=/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:/home/luis/bin7

845 23 * * 1,2,3,4,5 /home/casa/ahorros2/scripts/consigueDatos.sh > /dev/null 2>&1

Luis Fernando Llana Díaz Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

JDBC: Conexiones con bases de datos desde Java