1. Classe ResultSet.
Ara que estem connectats a la base de dades, és hora de començar a demanar informació al DBMS. Aquesta informació es proporcionarà en forma de consultes (SQL) o altres mètodes, però gairebé el 90% de les vegades, com en el cas de les consultes SQL, la informació retornada es troba en un format tabular. Els formats tabulars són ben coneguts perquè programes com MySQL Workbench o DBeaver mostren les dades d'aquesta manera.
En Java, la classe que permet treballar amb dades en format tabular provinents de bases de dades es diu Resultset. Un Resultset està compost per una taula (files i columnes) i un punter a una fila, anomenat cursor.

- Quan recuperem dades de les bases de dades, la informació es guarda a la taula i el cursor apunta a una fila imaginària buida anomenada
beforeFirst. Resultsetconté un mètode especial anomenatnext(), que fa dues accions:- Retorna
truesi hi ha una fila de dades després de la fila actual apuntada pel cursor ifalseen cas contrari. - Avança el cursor i apunta a la següent fila, sols si hi havia una.
- Quan el cursor d'un
Resultsetretornafalse, significa que s'han visitat totes les files i ara el cursor apunta a una altra fila imaginària anomenadaafterLast.
Quan el cursor apunta a una fila real, és quan podem recuperar les dades de les columnes de la fila actual. Podem utilitzar un mètode especial i sobrecarregat, de la següent manera:
getXXX(int posicióColumna)\(\rightarrow\) retorna les dades, onXXXés un tipus de dades (Int, Float, Double, String, etc.) de la posició de la columna, començant per 1.getXXX(String nomColumna)\(\rightarrow\) retorna les dades, onXXXés un tipus de dades (Int, Float, Double, String, etc.) de la columna amb el nom proporcionat.
Perill
Tingueu en compte:
- Les columnes comencen en 1 en lloc de 0, a diferència dels arrays.
- Si no coneixeu el tipus de dades d'una columna, podeu utilitzar
getObjecti aquest retornarà unObjectgenèric. - Aquests mètodes poden generar una
SQLExceptionsi el rang o el nom de la columna està fora de rang o no existeix.
1.1. ResulSetMetaData
Els ResultSets d'una consulta també tenen un conjunt de metadades. Aquestes metadades es poden obtenir utilitzant ResultSetMetaData. Els mètodes més rellevants d'aquesta classe són:
int getColumnCount()\(\rightarrow\) Obté el nombre de columnes al ResultSet.String getColumnName(index)\(\rightarrow\) Obté el nom de la columna indicada en l'índex (recorda que el primer és 1).String getColumnTypeName(index)\(\rightarrow\) Obté el tipus de la columna.
ResulSetMetaData s'obté de cada ResultSet generat prèviament, amb el mètode getMetaData().
1.2. Algorisme ResultSet
Independentment del contingut de dades del teu ResultSet, la manera en què hem de treballar és la següent:
| Java | |
|---|---|
Sigues conscient de que:
- Dins del bucle while no cal cridar
next()de nou. Es salta una fila en cas contrari. - Quan s'han processat les darreres files,
next()retornafalsei el bucle finalitza.
1.3. Exemple
En aquest bloc de codi, anem a veure un exemple breu per executar una consulta (Select * from table). Veurem altres consultes en les seccions següents.