1.- Exercici guiat
Crea una base de dades SQLite amb la taula Empleats, que continga informació sobre els empleats d’una empresa, incloent el seu NIF, nom, cognoms i salari.
1.- Creació i Inserció de Dades en una Base de Dades SQLite
SQLite és una base de dades relacional lleugera i fàcil d’utilitzar que es pot integrar en aplicacions mòbils i altres programes. En aquest exercici, aprendrem a crear una base de dades SQLite i a inserir dades en ella.
Podem usar SQLite Online per a realitzar aquest exercici. Pots accedir a SQLite Online a través del següent enllaç:
Creació de la Base de Dades i Taula
- Entra a l’intèrpret de línia de comandes de SQLite o a l’eina en línia.
- Executa el següent script SQL, que:
- Esborra la taula
Empleats
si ja existeix. - Crea la taula
Empleats
amb els següents camps:- NIF: Identificador únic de l’empleat (clau primària).
- Nom: Nom de l’empleat.
- Cognoms: Cognoms de l’empleat.
- Salari: Salari de l’empleat.
-- Esborra la taula si ja existeix DROP TABLE IF EXISTS Empleats; -- Crea la taula Empleats CREATE TABLE IF NOT EXISTS Empleats ( NIF VARCHAR(9) PRIMARY KEY, Nom VARCHAR(100), Cognoms VARCHAR(100), Salari REAL );
- Esborra la taula
Inserció de dades
Després de crear la taula, insereix les dades següents d’empleats utilitzant una única instrucció INSERT
amb múltiples valors:
-- Inserta dades en la taula Empleats
INSERT INTO Empleats (NIF, Nom, Cognoms, Salari) VALUES
('123456789', 'Pep', 'Martínez González', 2500.50),
('987654321', 'Marta', 'Soler Sánchez', 3000.75),
('111111111', 'Fina', 'Valls Beltran', 3000.75),
('222222222', 'Josefa', 'Beltran Benedito', 3000.75),
('333333333', 'Jaime', 'Valls Abad', 3000.75),
('444444444', 'Sergi', 'Navarro Pérez', 2000.00);
Validació de la taula i dades
Verifica que la taula ha sigut creada correctament i que les dades han sigut inserides:
- Executa la següent consulta per veure tot el contingut de la taula:
SELECT * FROM Empleats;
- Revisa que els registres siguen correctes.
Resultat
La taula Empleats
contindrà els següents registres:
NIF | Nom | Cognoms | Salari |
---|---|---|---|
123456789 | Pep | Martínez González | 2500.50 |
987654321 | Marta | Soler Sánchez | 3000.75 |
111111111 | Fina | Valls Beltran | 3000.75 |
222222222 | Josefa | Beltran Benedito | 3000.75 |
333333333 | Jaime | Valls Abad | 3000.75 |
444444444 | Sergi | Navarro Pérez | 2000.00 |
Exportar a fitxer .db
Des del menú File -> saveDB, una volta descarregat, canviem el nom al fitxer.
2.- Connectar a la Base de Dades SQLite amb Java.
Per connectar a la base de dades SQLite des de Java, necessitem la llibreria JDBC SQLite. Aquesta llibreria ens permetrà interactuar amb la base de dades i realitzar operacions com la inserció, actualització, eliminació i consulta de dades.
Crearem un projecte maven
amb IntelliJ
i afegim la dependència de JDBC SQLite al projecte. Per tant, afegim al fitxer pom.xml
:
<!-- https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc -->
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.47.0.0</version>
</dependency>
o la versió més actualitzada.
Incorprar la base de dades al projecte
Copiem el fitxer Empleats.db
a la carpeta resources
del projecte.
Connectar a la Base de Dades
Per connectar a la base de dades SQLite des de Java, necessitem la classe Connection
de la llibreria JDBC. A continuació, es mostra un exemple de com connectar a la base de dades Empleats.db
:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class SQLiteJDBC {
public static void main(String[] args) {
Connection connection = null;
try {
// Connectar a la base de dades
String url = "jdbc:sqlite:src/main/resources/Empleats.db";
connection = DriverManager.getConnection(url);
System.out.println("Connexió a SQLite establerta.");
} catch (SQLException e) {
System.out.println(e.getMessage());
} finally {
try {
if (connection != null) {
connection.close();
}
} catch (SQLException ex) {
System.out.println(ex.getMessage());
}
}
}
}
En aquest exemple, establim una connexió a la base de dades Empleats.db
utilitzant la URL jdbc:sqlite:src/main/resources/Empleats.db
. Si la connexió s’estableix correctament, es mostrarà el missatge Connexió a SQLite establerta.
.
crear consultes SQL
Neceistarem la classe Statement
per a executar consultes SQL a la base de dades. A continuació, es mostra un exemple de com crear una consulta SQL per a seleccionar totes les dades de la taula Empleats
:
ipackage com.jaume;
import javax.xml.transform.Source;
import java.sql.*;
public class ExerciciGuiat {
public static void main(String[] args) {
Connection connexio = null;
Statement sentenciaSQL = null;
ResultSet resultat = null;
try{
// Connectar amb la base de dades
String url = "jdbc:sqlite:src/main/resources/Empleats.db";
connexio = DriverManager.getConnection(url);
System.out.println("Connexió Establerta");
System.out.println("*******************");
// Creem una consulta i obeim el resultat
String sql = "SELECT * FROM Empleats";
sentenciaSQL = connexio.createStatement();
resultat = sentenciaSQL.executeQuery(sql);
// Recorrem el resultat de la consultai mostrem les dades
while (resultat.next()) {
String nif = resultat.getString("nif");
String nom = resultat.getString("nom");
String cognoms = resultat.getString("cognoms");
System.out.println(nif + "\t" + nom + "\t" + cognoms);
}
// Alliberem els recursos
resultat.close();
sentenciaSQL.close();
connexio.close();
}
catch(SQLException e){
System.out.println(e.getMessage());
}
}
}
NOTA: Per alliberar recursos, es fa en ordre invers al que s’han creat es a dir, primer el ResultSet
, després l’Statement
i finalment el Connection
:
resultat.close();
sentenciaSQL.close();
connexio.close();
El correcte seria fer-ho amb un bloc finally
:
finally {
try {
if (resultat != null) {
resultat.close();
}
if (sentenciaSQL != null) {
sentenciaSQL.close();
}
if (connexio != null) {
connexio.close();
}
} catch (SQLException ex) {
System.out.println(ex.getMessage());
}
}
3.- Crear consultes SQL
Crea les següents consultes SQL i mostra els resultats des de Java:
Requisits
-
Usa
Statement
iexecuteQuery()
: Per a totes les consultes, utilitza l’objecteStatement
ja creat. - Gestiona els recursos:
- Tanca el
ResultSet
després de cada consulta.
- Tanca el
- Dóna format a la sortida:
- Usa
printf()
per mostrar els resultats alineats i ben organitzats.
- Usa
Consultes SQL
- Consulta 1: Mostra tots els empleats amb un salari superior a 2000 i totes les seves columnes (
nif
,nom
,cognoms
,salari
) en format alineat.
Consulta 1
```sql SELECT * FROM Empleats WHERE Salari > 2000; ```- Consulta 2: Mostra només el
nif
i elnom
dels empleats amb el cognom exactament igual a “Soler Sánchez”.
Consulta 2
```sql SELECT nif, nom FROM Empleats WHERE cognoms = 'Soler Sánchez'; ```- Consulta 3: Ordena tots els empleats pel camp
salari
de major a menor i mostra totes les columnes (nif
,nom
,cognoms
,salari
) amb format alineat.
Consulta 3
```sql SELECT * FROM Empleats ORDER BY salari DESC; ```- Consulta 4: Calcula el salari mitjà de tots els empleats utilitzant la funció
AVG()
i mostra el resultat amb un missatge clar.
Consulta 4
```sql SELECT AVG(salari) AS salari_mitja FROM Empleats; ```L’eixida del programa ha de quedar com la següent:
Connexió Establerta
*******************
Consulta 1: Empleats amb salari superior a 2000
************************************************
NIF Nom Cognoms Salari
123456789 Pep Martínez González 2500.50
987654321 Marta Soler Sánchez 3000.75
111111111 Fina Valls Beltran 3000.75
222222222 Josefa Beltran Benedito 3000.75
333333333 Jaime Valls Abad 3000.75
Consulta 2: Empleats amb cognoms 'Soler Sánchez'
*************************************************
NIF Nom
987654321 Marta
Consulta 3: Ordenar empleats per salari de major a menor
*********************************************************
NIF Nom Cognoms Salari
987654321 Marta Soler Sánchez 3000.75
111111111 Fina Valls Beltran 3000.75
222222222 Josefa Beltran Benedito 3000.75
333333333 Jaime Valls Abad 3000.75
123456789 Pep Martínez González 2500.50
444444444 Sergi Navarro Pérez 2000.00
Consulta 4: Salari mitjà de tots els empleats
**********************************************
Salari mitjà: 2750.25