Línia de CódigoAprende a Programar

Programació en Java

Contra 01:00 base de dades podem executar diferents tipus de sentències, des d’una simple consulta, passant per insercions massives, fins a una sentència que augmenti els permisos d’un grup d’usuaris.

Però ara ens centrarem en les consultes ( SELECT) amb Java JDBC. Aquest tipus de sentències les utilitzarem per recuperar un conjunt de dades de la base de dades. En elles, el normal, és seleccionar un conjunt de camps d’una taula i mostrar-los per pantalla.

És clar aquesta que quan abandonem l’exemple bàsic de la taula de 10 registres i ens enfrontem a taules de milions i milions de dades, hauríem, anem, que seria bastant aconsellable, fer algun tipus de filtre. Crec que qualsevol administrador de bases de dades podria arribar a les mans amb nosaltres si executem una consulta sobre una taula de clients si no incluyésemos cap filtre. Ara, que si només filtrem per ciutat igual a “Àvila”, crec que també.

Bé, al que anem. Tenim diferents formes de realitzar filtres en una consulta. El primer acostament és codificar directament els valors en la sentència. Una cosa com …

SELECT nombre, edad, profesión, ciudadFROM personasWHERE ciudad = 'Ávila'AND edad BETWEEN 24 AND 32

Això sí, esperem que el nostre cap no ens digui que vol un informe on introduint una ciutat i dues edats li traguem el conjunt de persones que compleixen aquests requisits.

a si que com som molt previsors, vam muntar la següent consulta on aniran els paràmetres com a variables. Quedant una cosa així …

String sCiudad, sEdad1, sEdad2;String sSQL = "SELECT nombre, edad, profesión, ciudad FROM personas WHERE ciudad = '" + sCiudad + "' AND edad BETWEEN " + sEdad1 + " AND " + sEdad1 + ";"

Doncs aquest és un dels majors errors que podem cometre i és que la concatenació de cadenes pot donar lloc al següent (si no prenem la precaucions necessàries i si dóna la casualitat que tenim un usuari una mica espavilat).

sCiudad = "Avila";sEdad1 = "20";sEdad2 = "28; DELETE FROM cuentas";

Quedant-nos en execució la següent consulta:

SELECT nombre, edad, profesión, ciudadFROM personasWHERE ciudad = 'Ávila'AND edad BETWEEN 24 AND 32;DELETE FROM cuentas

i crec que aquesta si que no li agradarà gens al nostre cap.

Diguem que això és un cas excepcional i que no hauria de produir-se . És conegut com injecció de codi SQL. Tot i això, la forma més correcta de fer-ho seria mitjançant la inserció de paràmetres.

Inicialment, en Java JDBC, haurem de posar un interrogant a cada lloc on vulguem ficar un valor dinàmicament. Després, substituirem cada interrogació per un valor mitjançant el mètode setXXX de l’PreparedStatement. On XXX serà el tipus de valor que vulguem inserir: String, int, Dati, … Així tindrem setString, setInt, setArray, setByte, …

Com saber per que interrogació se substitueix el valor? Doncs, perquè, el primer paràmetre de mètode és el nombre d’interrogació a substituir (començant per l’1).

stmt = con.prepareStatement("SELECT nombre, edad, profesion, ciudad FROM Personas WHERE edad > ? AND ciudad = ?");stmt.setInt(1,25);stmt.setString(2,"Salamanca");
19 Compartir

Leave a Comment

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *