Post on 25-Jul-2020
JDBC: Conexiones con bases de datos desde Java
Luis Fernando Llana Dıaz
Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid
21 de abril de 2008
Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
JDBC
Conexion con una fuentes de datos.
Realizar peticiones y actualizaciones.
Manejar los resultados de las consultas
Aplicacion Java
JDBC
DBMSMySQL
DBMSOracle
DBMSPostgresSQL
Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
Drivers JDBC
Es necesario un driver dependiente del proveedor de la Base dedatos.
MySQL MySQL java connector
Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
Creando la base de datos
Fichero crea.sql
1create database valores;
2use valores;
34create table valores (
5id int unsigned auto_increment primary key ,
6nombre varchar (255),
7ibex_id varchar (100),
8url varchar (255) ,
9tipo enum("acciones","fondos")
10);
1112create table datos (
13id int unsigned auto_increment primary key ,
14valor int unsigned ,
15fecha date ,
16precio double ,
17index (fecha),
18unique index (fecha ,valor)
19);
2021grant all on valores .* to luis identified by ’diez799 ’;
1~/sql$ mysql -u root < crea.sql
Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
Interfaz java.sql.Connection
Establece conexion con la base de datos. No tiene constructor.
Es un interfaz (esta implementado en el driver).
Constuye instrucciones SQL precompiladas (metodoprepareStatement).
Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
Realizando conexion con la base de datos
1package valores;
2import java.sql.Connection;
3import java.sql.DriverManager;
4import java.sql.SQLException;
56public 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 Informaticos y ComputacionUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
Ficheros de datos
Fichero de valores: valores.csv
BSCH ·BSCH ·acciones ·http ://www.bolsamadrid.es/esp/mercados/acciones/accind1_1.htmEndesa ·ENDESA ·acciones ·http ://www.bolsamadrid.es/esp/mercados/acciones/accind1_1.htmRepsol - YPF·REPSOL YPF ·acciones ·http ://www.bolsamadrid.es/esp/mercados/acciones/accind1_1.htmAcciona ·ACCIONA ·acciones ·http :// www.bolsamadrid.es/esp/mercados/acciones/accind1_1.htmInditex ·INDITEX ·acciones ·http :// www.bolsamadrid.es/esp/mercados/acciones/accind1_1.htmTelefonica ·TELEFONICA ·acciones ·http ://www.bolsamadrid.es/esp/mercados/acciones/accind1_1.htmBanco Popular·BA . POPULAR ·acciones ·http ://www.bolsamadrid.es/esp/mercados/acciones/accind1_1.htmEbro - Puleva·EBRO PULEVA ·acciones ·http :// www.bolsamadrid.es/esp/mercados/acciones/igbm_3_1.htmMittal - Steel·ARCELOR MIT. ·acciones ·http :// www.bolsamadrid.es/esp/mercados/acciones/igbm_2_1.htmIndra·INDRA A ·acciones ·http ://www.bolsamadrid.es/esp/mercados/acciones/igbm_6_1.htmEADS ·EADS ·acciones ·http ://www.bolsamadrid.es/esp/mercados/acciones/igbm_2_1.htmUnipapel ·UNIPAPEL ·acciones ·http :// www.bolsamadrid.es/esp/mercados/acciones/igbm_3_1.htmMadrid Bolsa·MADRID BOLSA ·fondos ·http ://www.bolsamadrid.es/esp/mercados/fondos/htmfondos /0085 alfa.htmPlus Madrid ·PLUSMADRID ·fondos ·http :// www.bolsamadrid.es/esp/mercados/fondos/htmfondos /0085 alfa.htmFonCaixa 65 ·FONCAIXA 65 BOLSA INDICE ESPA ñ A ·fondos ·http ://www.bolsamadrid.es/esp/mercados/fondos/htmfondos /0015 alfa100.htm
Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
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 Informaticos y ComputacionUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
¿Donde esta el fichero sql/valores.csv?
1.
2|-- |-- sql
3| |-- borra.sql
4| |-- crea.sql
5| |-- datos.csv
6| |-- usuarios.csv
7| ‘-- valores.csv
8|-- src
9| |-- valores
10| | |-- CVS
11| | | |-- Entries
12| | | |-- Repository
13| | | ‘-- Root
14| | |-- Conexion.java
15| | |-- ConsigueDatos.java
16| | |-- ConsigueDatos.java .~1.1.~
17| | |-- LeeDatos.java
18| | ‘-- LeeValores.java
19|-- classes
20| ‘-- valores
21| |-- Conexion.class
22| |-- ConsigueDatos.class
23| |-- LeeDatos.class
24| ‘-- LeeEmpresas.class
Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
Accediendo sql/valores.csv
Los objetos de clase ClassLoader permitend acceder a losrecursos Java.
1java.net.URL url = ClassLoader.getSystemResource(fich);
fich debe estar dentro del CLASSPATH en la ejecucion.
1~/Java$ export CLASSPATH =.:./ classes
2~/Java$ $JAVA_HOME/bin/java valores.LeeValores
Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
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;
89private 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 Informaticos y ComputacionUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
Ficheros de datos
Fichero de valores: valores.csv
Fecha ·BSCH ·ENDESA ·REPSOL - YPF ·ACCIONA ·INDITEX ·Telefonica ·Banco Popular·Ebro - Puleva·Mittal Steel ·INDRA ·AEDS ·Unipapel ·Madrid Bolsa ·PlusMadrid ·Fon Caixa 65
28/03/02 ·9 .6 ·17 .05 ·14 .45 · · · · · · · · · · 1 2 .35 ·17 .33 ·5 .4901/04/02 ·9 .6 ·17 .05 ·14 .45 · · · · · · · · · · 1 2 .35 ·17 .33 ·5 .49· · · · · · · · · · · · · · ·27/08/04 ·8 ·15 .25 ·16 .98 ·50 .15 ·19 ·11 .83 · · · · · · · 1 1 .81 ·17 .03 ·4 .6430/08/04 ·7 .99 ·15 .29 ·17 .03 ·50 .05 ·19 .08 ·11 .78 · · · · · · · 1 1 .89 ·17 .1 ·4 .6612/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 .15· · · · · · · · · · · · · · ·19/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 .3520/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 .3721/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 .33· · · · · · · · · · · · · · ·27/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 .2628/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 .1829/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 .1801/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 .1802/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 Informaticos y ComputacionUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
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}
27linea = in.readLine ();
28}
29}
Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
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 ñ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 Informaticos y ComputacionUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
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 Informaticos y ComputacionUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
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 Telefonica acciones
Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
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 Telefonica acciones
Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
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 Telefonica acciones
Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
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 Telefonica acciones
Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
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 Telefonica acciones
Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
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 Telefonica acciones
Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
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 Telefonica acciones
Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
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 Telefonica acciones
Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
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 Informaticos y ComputacionUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
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’ o \euroo ’");
14System.out.println(df.format(fecha)+"\t"+nombre+"\t"+nf.format(precio ));
15}
16}
Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
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 Informaticos y ComputacionUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
Consiguiendo datos desde www.bolsamadrid.es
Conseguir el fichero HTML.
Analizar el fichero.
Anadir datos en la base de datos.
Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
Conseguir el fichero HTML
Fichero de valores: valores.csv
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 Informaticos y ComputacionUniversidad 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
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 ibexID , String datos , String tipo)
2throws ParseException {
3String regExp=null;
4if (tipo.equals("acciones")) {
5regExp=ibexID+" *</A></TD ><TD >([0-9,]+) </TD >";
6} else if (tipo.equals("fondos")) {
7regExp=ibexID+" *</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 \’"+ibexID+"\’ no encontrada");
19}
20}
Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
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;
67private 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 Informaticos y ComputacionUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
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 ibexID = rs.getString("ibex_id");
14double valor = getValor(ibexID ,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 Informaticos y ComputacionUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java
Consiguiendo datos automaticamente
1#!/ bin/sh
2# $Id: transparencias .tex ,v 1.8 2007 -05 -10 11:37:22 luis Exp $
34JAVA_HOME =/usr/lib/jvm/java -1.5.0 - sun
5CLASSPATH =/home/casa/ahorros2/classes
6$JAVA_HOME/bin/java -cp $CLASSPATH valores.ConsigueDatos $*
1$ crontab -l
23SHELL=/bin/bash
4MAILTO=luis
5# Directorios donde buscar programas
6PATH=/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:/home/luis/bin
7845 23 * * 1,2,3,4,5 /home/casa/ahorros2/scripts/consigueDatos.sh > /dev/null 2>&1
Luis Fernando Llana Dıaz Departamento de Sistemas Informaticos y ComputacionUniversidad Complutense de Madrid
JDBC: Conexiones con bases de datos desde Java