Download versión para imprimir - Universidad Complutense de Madrid

Document related concepts
no text concepts found
Transcript
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
21 de abril de 2008
Luis Fernando Llana Dı́az
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
JDBC
Conexión con una fuentes de datos.
Realizar peticiones y actualizaciones.
Manejar los resultados de las consultas
Aplicación Java
JDBC
DBMS
MySQL
Luis Fernando Llana Dı́az
DBMS
Oracle
DBMS
PostgresSQL
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
Drivers JDBC
Es necesario un driver dependiente del proveedor de la Base de
datos.
MySQL
Luis Fernando Llana Dı́az
MySQL java connector
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
Creando la base de datos
Fichero crea.sql
grant all on valores .* to luis identified by ’ diez799 ’;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
~/ sql$ mysql -u root < crea . sql
1
create database valores ;
use valores ;
create table valores (
id int unsigned auto_increment primary key ,
nombre varchar (255) ,
ibex_id varchar (100) ,
url varchar (255) ,
tipo enum ( " acciones " ," fondos " )
);
create table datos (
id int unsigned auto_increment primary key ,
valor int unsigned ,
fecha date ,
precio double ,
index ( fecha ) ,
unique index ( fecha , valor )
);
Luis Fernando Llana Dı́az
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
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
Realizando conexión con la base de datos
1
2
3
4
5
public class Conexion {
6
protected static Connection g et My s ql C on ne c ti o n ( String url , String db ,
7
String user , String passwd )
8
throws ClassNotFoundException ,
9
InstantiationException ,
10
SQLException ,
11
IllegalAccessException {
12
Class . forName ( " com . mysql . jdbc . Driver " ). newInstance ();
13
return DriverManager . getConnection ( " jdbc : mysql :// " + url + " / " + db +
14
" ? user = " + user + " & password = " + passwd );
15
}
16
protected static Connection g et My s ql C on ne c ti o n ()
17
throws ClassNotFoundException ,
18
InstantiationException ,
19
SQLException ,
20
IllegalAccessException {
21
return g e tM y sq lC o nn e ct io n ( " localhost " , " valores " , " luis " , " patata " );
22
}
23
protected static String getFich ( String fich ) {
24
java . net . URL url = ClassLoader . get Sys tem Res o u r c e ( fich );
25
return url . getPath ();
26
}
27
}
28
Luis Fernando Llana Dı́az
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
package valores ;
import java . sql . Connection ;
import java . sql . DriverManager ;
import java . sql . SQLException ;
JDBC: Conexiones con bases de datos desde Java
Ficheros de datos
Fichero de valores: valores.csv
B S C H · B S C H · a c c i o n e s · h t t p :// www . bolsamadrid . es / esp / mercados / acciones / accind1_1 . htm
E n d e s a · E N D E S A · a c c i o n e s · h t t p :// www . bolsamadrid . es / esp / mercados / acciones / accind1_1 . htm
Repsol - Y P F · R E P S O L Y P F · a c c i o n e s · h t t p :// www . bolsamadrid . es / esp / mercados / acciones / accind1_1 . htm
A c c i o n a · A C C I O N A · a c c i o n e s · h t t p :// www . bolsamadrid . es / esp / mercados / acciones / accind1_1 . htm
I n d i t e x · I N D I T E X · a c c i o n e s · h t t p :// www . bolsamadrid . es / esp / mercados / acciones / accind1_1 . htm
T e l é f o n i c a · T E L E F O N I C A · a c c i o n e s · h t t p :// www . bolsamadrid . es / esp / mercados / acciones / accind1_1 . htm
Banco P o p u l a r · B A . P O P U L A R · a c c i o n e s · h t t p :// www . bolsamadrid . es / esp / mercados / acciones / accind1_1 . htm
Ebro - P u l e v a · E B R O P U L E V A · a c c i o n e s · h t t p :// www . bolsamadrid . es / esp / mercados / acciones / igbm_3_1 . htm
Mittal - S t e e l · A R C E L O R MIT . · a c c i o n e s · h t t p :// www . bolsamadrid . es / esp / mercados / acciones / igbm_2_1 . htm
I n d r a · I N D R A A · a c c i o n e s · h t t p :// www . bolsamadrid . es / esp / mercados / acciones / igbm_6_1 . htm
E A D S · E A D S · a c c i o n e s · h t t p :// www . bolsamadrid . es / esp / mercados / acciones / igbm_2_1 . htm
U n i p a p e l · U N I P A P E L · a c c i o n e s · h t t p :// www . bolsamadrid . es / esp / mercados / acciones / igbm_3_1 . htm
Madrid B o l s a · M A D R I D B O L S A · f o n d o s · h t t p :// www . bolsamadrid . es / esp / mercados / fondos / htmfondos /0085 alfa . htm
Plus M a d r i d · P L U S M A D R I D · f o n d o s · h t t p :// www . bolsamadrid . es / esp / mercados / fondos / htmfondos /0085 alfa . htm
FonCaixa 65 · F O N C A I X A 65 BOLSA INDICE ESPA &#241; A · f o n d o s · h t t p :// 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
Cargar datos
package valores ;
1
import java . io . BufferedReader ;
2
import java . io . FileReader ;
3
import java . io . IOException ;
4
import java . sql . Connection ;
5
import java . sql . Pr epa redS tat eme nt ;
6
import java . sql . SQLException ;
7
import java . util . Scanner ;
8
public class LeeValores {
9
private static void insertaDatos ( Connection con , Buf feredRe ader in )
10
throws IOException , SQLException {
11
.....................
12
}
13
public static void main ( String [] args ) throws Exception {
14
Connection con = null ;
15
BufferedReader in = null ;
16
try {
17
con = Conexion . ge t My s ql Co n ne c ti on ();
18
in = new BufferedReader ( new FileReader ( Conexion . getFich ( " sql / valores . csv
19" )));
insertaDatos ( con , in );
20
} finally {
21
if ( con != null ) con . close ();
22
if ( in != null ) in . close ();
23
}
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
¿Dónde está el fichero
.
|-|
|
|
|
|
|-|
|
|
|
|
|
|
|
|
|
|-|
|
|
|
|
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 .~1.1.~
|
| - - LeeDatos . java
|
‘-- LeeValores . java
classes
‘-- valores
| - - Conexion . class
| - - ConsigueDatos . class
| - - LeeDatos . class
‘-- LeeEmpresas . class
Luis Fernando Llana Dı́az
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
Accediendo
sql/valores.csv
Los objetos de clase ClassLoader permitend acceder a los
recursos Java.
java . net . URL url = ClassLoader . get Sys tem Res ourc e ( fich );
1
fich debe estar dentro del CLASSPATH en la ejecución.
~/ Java$ export CLASSPATH =.:./ classes
~/ Java$ $JAVA_HOME / bin / java valores . LeeValores
Luis Fernando Llana Dı́az
1
2
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
Cargar datos
1
2
3
4
5
6
7
8
private static void insertaDatos ( Connection con , Buf feredRe ader in )
9
throws IOException , SQLException {
10
String linea = in . readLine ();
11
Pr epa redS tat eme nt pstmt = con . prepareStatemen t ( sqlIns );
12
while ( linea != null ) {
13
Scanner scan = new Scanner ( linea );
14
scan . useDelimiter ( " · " );
15
String nombre = scan . next ();
16
String ibex_id = scan . next ();
17
String tipo = scan . next ();
18
String url = scan . next ();
19
System . out . println ( nombre + " : " + ibex_id + " : " + tipo + " : " + url );
20
pstmt . setString ( NOMBRE , nombre );
21
pstmt . setString ( IBEX_ID , ibex_id );
22
pstmt . setString ( TIPO , tipo );
23
pstmt . setString ( URL_BOLSA , url );
24
int n = pstmt . executeUpdate ();
25
linea = in . readLine ();
26
}
27
}
28
Luis Fernando Llana Dı́az
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
private static final String sqlIns =
" insert into valores ( nombre , ibex_id , url , tipo ) " +
" values ( ? , ? , ? , ?) " ;
private final static int NOMBRE =1;
private final static int IBEX_ID =2;
private final static int URL_BOLSA =3;
private final static int TIPO =4;
JDBC: Conexiones con bases de datos desde Java
Ficheros de datos
Fichero de valores: valores.csv
F e c h a · B S C H · E N D E S A · R E P S O L - Y P F · A C C I O N A · I N D I T E X · T e l e f ó n i c a · B a n c o P o p u l a r · E b r o - P u l e v a · M i t t a l S t e e l · I N D R A · A E D S · U n i p a p e l · M a d r i d B o l s a · P l u s M a d r i d · F o n Caixa 65
28/03/02 · 9 .6 · 1 7 .05 · 1 4 .45 · · · · · · · · · · 1 2 .35 · 1 7 .33 · 5 .49
01/04/02 · 9 .6 · 1 7 .05 · 1 4 .45 · · · · · · · · · · 1 2 .35 · 1 7 .33 · 5 .49
···············
27/08/04 · 8 · 1 5 .25 · 1 6 .98 · 5 0 .15 · 1 9 · 1 1 .83 · · · · · · · 1 1 .81 · 1 7 .03 · 4 .64
30/08/04 · 7 .99 · 1 5 .29 · 1 7 .03 · 5 0 .05 · 1 9 .08 · 1 1 .78 · · · · · · · 1 1 .89 · 1 7 .1 · 4 .66
12/12/06 · 1 4 .01 · 3 5 .76 · 2 7 .71 · 1 3 7 .95 · 3 9 .59 · 1 6 .06 · 1 3 .7 · 1 8 .62 · 3 1 .5 · 1 8 .35 · · · 2 1 .08 · 2 5 .22 · 8 .15
···············
19/12/06 · 1 3 .98 · 3 5 .15 · 2 6 .96 · 1 3 8 .2 · 4 0 .78 · 1 6 .11 · 1 3 .7 · 1 9 .17 · 3 1 .25 · 1 8 .15 · 2 4 .20 · · 2 1 .51 · 2 5 .57 · 8 .35
20/12/06 · 1 4 .08 · 3 5 .16 · 2 6 .92 · 1 3 9 .9 · 4 0 .95 · 1 6 .28 · 1 3 .68 · 1 9 .28 · 3 1 .86 · 1 8 .42 · 2 5 .45 · · 2 1 .4 · 2 5 .47 · 8 .37
21/12/06 · 1 4 .06 · 3 5 .43 · 2 6 .6 · 1 4 0 .9 · 4 0 .61 · 1 6 .15 · 1 3 .65 · 1 9 .25 · 3 1 .86 · 1 8 .46 · 2 5 .79 · · 2 1 .2 · 2 5 .29 · 8 .33
···············
27/12/06 · 1 4 .16 · 3 5 .72 · 2 6 .5 · 1 4 0 · 4 1 .01 · 1 6 .2 · 1 3 .69 · 1 9 .59 · 3 1 .95 · 1 9 .06 · 2 6 .07 · 2 1 .34 · 2 1 .16 · 2 5 .25 · 8 .26
28/12/06 · 1 4 .12 · 3 5 .55 · 2 6 .41 · 1 4 1 .05 · 4 0 .89 · 1 6 .16 · 1 3 .68 · 1 9 .12 · 3 2 .26 · 1 8 .67 · 2 6 .00 · 2 1 .40 · 2 1 .05 · 2 5 .14 · 8 .18
29/12/06 · 1 4 .14 · 3 5 .83 · 2 6 .2 · 1 4 1 .1 · 4 0 .81 · 1 6 .12 · 1 3 .73 · 1 9 .2 · 3 2 · 1 8 .61 · 2 6 .00 · 2 1 .50 · 2 1 .23 · 2 5 .3 · 8 .18
01/01/07 · 1 4 .14 · 3 5 .83 · 2 6 .2 · 1 4 1 .1 · 4 0 .81 · 1 6 .12 · 1 3 .73 · 1 9 .2 · 3 2 · 1 8 .61 · 2 6 .00 · 2 1 .50 · 2 1 .18 · 2 5 .24 · 8 .18
02/01/07 · 1 4 .49 · 3 5 .57 · 2 6 .63 · 1 4 3 .05 · 4 0 .79 · 1 6 .39 · 1 3 .97 · 1 9 .46 · 3 2 .87 · 1 8 .88 · 2 6 .29 · 2 1 .85 · 2 1 .18 · 2 5 .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
Cargar datos
private static void insertaDatos ( Connection con , Buf feredRe ader in )
1
throws IOException , SQLException , ParseExcep tion {
2
int [] id_valores = valores ( con );
3
String linea = in . readLine ();
4
linea = in . readLine ();
5
String sql = " insert into datos ( fecha , valor , precio ) values ( ? , ? , ? ) " ; 6
Pr epa redS tat eme nt pstmt = con . prepareStatemen t ( sql );
7
while ( linea != null ) {
8
Scanner scan = new Scanner ( linea );
9
scan . useDelimiter ( " · " );
10
String strFecha = scan . next ();
11
if (! strFecha . equals ( " " )) {
12
DateFormat df = new SimpleDateFormat ( " dd / MM / yy " );
13
Date fecha = df . parse ( strFecha );
14
System . out . println ( df . format ( fecha ));
15
for ( int i = 0; i < id_valores . length ; i ++) {
16
String strValor = scan . next ();
17
if (! strValor . equals ( " " )) {
18
double precio = Double . parseDouble ( strValor );
19
pstmt . setDate (1 , new java . sql . Date ( fecha . getTime ()));
20
pstmt . setInt (2 , id_valores [ i ]);
21
pstmt . setDouble (3 , precio );
22
int n = pstmt . executeUpdate ();
23
}
24
}
25
}
26
linea = in . readLine ();
27
}
28
29
Luis Fernando} Llana Dı́az
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
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 65 BOLSA INDICE ESPA &#241; 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 ? " ;
Pr epa redS tat eme nt pstmt = con . prepareStatemen t ( sql );
for ( int i = 0; i < ids . length ; i ++) {
pstmt . setString (1 , valores [ i ]);
ResultSet rs = pstmt . executeQuery ();
rs . next ();
ids [ i ]= rs . getInt (1);
}
return ids ;
}
Luis Fernando Llana Dı́az
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
Realizar actualizaciones
Instrucciones: INSERT, UPDATE, DELETE
public static void pr2 ( Connection con ) throws SQLException {
String sql = " update datos set precio = precio +1 " ;
Pr epa redS tat eme nt pstmt = con . prepareStatemen t ( 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 " );
}
}
Luis Fernando Llana Dı́az
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
Realizar Consultas
Instrucciones Select
1
select id , nombre , tipo from valores
ResultSet rs = pstmt.executeQuery();
rs.next();
rs
rs
rs
rs
rs
rs
rs
Luis Fernando Llana Dı́az
id
1
2
3
4
5
6
nombre
BSCH
Endesa
Repsol-YPF
Acciona
Inditex
Telefónica
tipo
acciones
acciones
acciones
acciones
acciones
acciones
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
Ejemplos de consultas I
public static void pr1 ( Connection con ) throws SQLException {
String sql = " select * from valores " ;
Pr epa redS tat eme nt pstmt = con . prepareStatemen t ( sql );
ResultSet rs = pstmt . executeQuery ();
while ( rs . next ()) {
int id = rs . getInt ( " id " );
String nombre = rs . getString ( " nombre " );
System . out . println ( id + " : " + nombre );
}
}
Luis Fernando Llana Dı́az
1
2
3
4
5
6
7
8
9
10
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
Ejemplos de consultas II
public static void pr3 ( Connection con ) throws SQLException {
1
String sql = " select valores . nombre , datos . fecha , datos . precio " +
2
" from datos left join valores on valores . id = datos . valor " +
3
" where datos . fecha >= ’2007 -03 -01 ’ " +
4
" order by valores . tipo , valores . nombre , datos . fecha " ;
5
Pr epa redS tat eme nt pstmt = con . prepareStatemen t ( sql );
6
ResultSet rs = pstmt . executeQuery ();
7
while ( rs . next ()) {
8
String nombre = rs . getString ( " valores . nombre " );
9
Date fecha = rs . getDate ( " datos . fecha " );
10
double precio = rs . getDouble ( " datos . precio " );
11
DateFormat df = new SimpleDateFormat ( " dd ’ de ’ MMMM ’ de ’ yyy " );
12
o
o
NumberFormat nf = new DecimalFormat ( " # ,000.00 ’ \ euro ’" );
13
System . out . println ( df . format ( fecha )+ " \ t " + nombre + " \ t " + nf . format ( precio ));
14
}
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
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 + " ’" ;
Pr epa redS tat eme nt pstmt = con . prepareStatemen t ( sql );
ResultSet rs = pstmt . executeQuery ();
if ( rs . next ()) {
return rs . getInt (1);
} else {
return -1;
}
}
Luis Fernando Llana Dı́az
1
2
3
4
5
6
7
8
9
10
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
Consiguiendo datos desde www.bolsamadrid.es
Conseguir el fichero HTML.
Analizar el fichero.
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
Conseguir el fichero HTML
Fichero de valores: valores.csv
private static String cargaPagina ( java . net . URL url )
throws IOException {
InputStream in = url . openStream ();
StringBuffer sb = new StringBuffer ();
int c = in . read ();
while ( c != -1) {
sb . append (( char ) c );
c = in . read ();
}
String res = sb . toString ();
return res ;
}
Luis Fernando Llana Dı́az
1
2
3
4
5
6
7
8
9
10
11
12
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
Analizar el fichero HTML
Fichero de valores:
http://www.bolsamadrid.es/esp/mercados/acciones/accind1_1.htm
.....................
.... < IMG SRC = " / images / arr - up9 . gif " BORDER =0 > BSCH </ A > </ TD > < TD > 13 ,50 </ TD > .....
.....................
.... < IMG SRC = " / images / arr - dw9 . gif " BORDER =0 > ENDESA </ A > </ TD > < TD > 40 ,29 </ TD > ...
1
2
3
4
private static double getValor ( String ibexID , String datos , String tipo )
1
throws ParseException {
2
String regExp = null ;
3
if ( tipo . equals ( " acciones " )) {
4
regExp = ibexID + " * </A > </ TD > < TD >([0 -9 ,]+) </ TD > " ;
5
} else if ( tipo . equals ( " fondos " )) {
6
regExp = ibexID + " * </a > </ TD >.*? < TD *[^ >]* >([0 -9 ,]+) </ TD > " ;
7
} else {
8
throw new RuntimeException ( " Tipo \ ’ " + tipo + " \ ’ desconocido " );
9
}
10
Pattern p = Pattern . compile ( regExp );
11
Matcher m = p . matcher ( datos );
12
if ( m . find ()) {
13
// Double . p a r s e D o u b l e no vale , no analiza 13 ,50
14
NumberFormat nf = NumberFormat . getInstance ();
15
return nf . parse ( m . group (1)). doubleValue ();
16
} else {
17
throw new RuntimeException ( " Acciones \ ’ " + ibexID + " \ ’ no encontrada " );
18
}
19
Luis Fernando Llana Dı́az
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
}
20
JDBC: Conexiones con bases de datos desde Java
Insertar los datos en la Base de datos
private static
" insert
private static
private static
private static
final String sqlIns =
into datos ( fecha , valor , precio ) values ( ? , ? , ?) " ;
final int FECHA =1;
final int VALOR =2;
final int PRECIO =3;
private static void insertaDatos ( java . sql . Date fecha , Connection con )
throws SQLException , IOException , ParseExcep tion {
HashMap < String , String > paginas = new HashMap < String , String >();
String sql = " select * from valores " ;
Pr epa redS tat eme nt pstmtValores = con . prepare S t a t e me nt ( sql );
ResultSet rs = pstmtValores . executeQuery ();
Pr epa redS tat eme nt pstmtIns = con . prepareStat em en t ( sqlIns );
while ( rs . next ()) {
insertaDatos ( pstmtIns ,
fecha ,
rs , paginas );
}
}
Luis Fernando Llana Dı́az
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
Insertar los datos en la Base de datos
private static void insertaDatos ( P rep are dSt atem e n t 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 ibexID = rs . getString ( " ibex_id " );
double valor = getValor ( ibexID , 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 ();
}
Luis Fernando Llana Dı́az
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
Consiguiendo datos automáticamente
# !/ bin / sh
# $Id : t r a n s p a r e n c i a s . tex , v 1.8 2007 -05 -10 11:37:22 luis Exp $
JAVA_HOME =/ usr / lib / jvm / java -1.5.0 - sun
CLASSPATH =/ home / casa / ahorros2 / classes
$JAVA_HOME / bin / java - cp $CLASSPATH valores . ConsigueDatos $ *
1
2
3
4
5
6
1
2
SHELL =/ bin / bash
3
MAILTO = luis
4
# Directorios donde buscar programas
5
PATH =/ bin :/ usr / bin :/ usr / X11R6 / bin :/ usr / local / bin :/ home / luis / bin
6
7
45 23 * * 1 ,2 ,3 ,4 ,5
/ home / casa / ahorros2 / scripts / consigueDatos . sh > / dev / null 2 >&1
8
$ crontab -l
Luis Fernando Llana Dı́az
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java