+ - 0:00:00
Notes for current slide
Notes for next slide

JDBC

Mateu Yábar Valles

1 / 17

Llicència

Pots copiar i redistribuir aquest material seguint la llicència Attribution-NonCommercial-ShareAlike 4.0 International CC BY-NC-SA 4.0, indicant-ne autors originals, l'origen (aquesta web), sense fins comercials i mantenint-ne aquesta la llicència

Autors:

2 / 17

JDBC

JDBC (Java DataBase Connectivity) és una API que permet a les aplicacions Java accedir mitjançant una interfície comuna a les bases de dades.

3 / 17

Drivers

Perquè Java es puga comunicar en la base de dades necessita els drivers necessaris, que li indica el protocol de comunicació que ha de seguir. Per exemple, no es comunica de la mateixa manera una BBDD MySQL que un PostgreSQL.

S'ha d'afegir la llibreria corresponent al projecte. A IntelliJ es pot trobar a File > Project Structure > Libraries Des d'aquí, la podem afegir manualment o baixar-la des d'un repositori de Maven.

Per PostgreSQL podem trobar els drivers si busquem org.postgresql:postgresql.

4 / 17

Connexió

Per comunicar-se amb la BBDD s'ha de crear una connexió. La podem crear de la següent manera:

Les connexions han de tancar-se una vegada has acabat amb ella.

String URL = "jdbc:postgresql://url:port/";
String BD = "baseDeDades";
String USER = "user";
String PASS = "password";
try (Connection connection = DriverManager.getConnection(URL + BD, USER, PASS)){
// Usar la connexió aquí
}
5 / 17

Query - Insertar

Les operacions a la BBDD es realitzen mitjançant queries.

  • PreparedStatement: Construeix una query amb variables, que s'assignaran després (semblant al printf).

Per exemple, la operació d'insertar un Rectangle a una BBDD:

String query = "INSERT INTO rectangles(width, height) VALUES(?, ?)";
PreparedStatement insertStatement = connection.prepareStatement(query);
insertStatement.setInt(1, 34);
insertStatement.setInt(2, 77);
insertStatement.execute();
6 / 17

Query - List

Si la query no té variables, la podem definir com Statement. El mètode Statement.executeQuery(query) ens retorna un ResultSet que podem recórrer per veure els resultats de la query.

Exemple: Recuperar la llista de rectangles d'una BBDD.

7 / 17

Query - List

String listQuery = "SELECT * FROM rectangles";
Statement listStatement = connection.createStatement();
ResultSet resultat = listStatement.executeQuery(listQuery);
List<Rectangle> list = new ArrayList<>();
while (resultat.next()){
int id = resultat.getInt("id");
int width = resultat.getInt("width");
int height = resultat.getInt("height");
list.add(new Rectangle(id, width, height));
}
System.out.println(list);
8 / 17

Query - Delete

String query = "DELETE FROM rectangles WHERE id = ?";
PreparedStatement insertStatement = connection.prepareStatement(query);
insertStatement.setInt(1, id);
insertStatement.execute();
9 / 17

Query - Update

String query = "UPDATE rectangles SET(width, height) = (?, ?) WHERE id = ?";
PreparedStatement insertStatement = connection.prepareStatement(query);
insertStatement.setInt(1, r.getWidth());
insertStatement.setInt(2, r.getHeight());
insertStatement.setInt(3, r.getId());
insertStatement.execute();
10 / 17

Projecte amb BBDD

Quan implementem un projecte amb accès a BBDD, cal tindre clar el propòsit de cada Class i organitzar-les en els packages corresponents.

Un exemple de projecte seria el següent:

project
├── data
│ ├── Database.java
│ └── RectangleDAO.java
├── models
│ └── Rectangle.java
├── ui
│ └── MenuPrincipal.java
└── RectangleApp.java
11 / 17

Projecte amb BBDD

  • data: Classes que gestionen l'accès a les BBDD.
    • DAO: Les classes DAO(Data Acces Object) son les encarregades de gestionar les operacions amb la BBDD d'un tipus d'objecte determinat.
  • models: L'estructura dels objectes dins la nostra aplicació.

BBDD -> RectangleDAO -> Rectangle

12 / 17

Database

public class RectangleDatabase {
private static String URL = "jdbc:postgresql://url:port/";
private static String BD = "baseDeDades";
private static String USER = "user";
private static String PASS = "password";
Connection connection;
public Connection connect() throws SQLException {
connection = DriverManager.getConnection(URL + BD, USER, PASS);
return connection;
}
public Connection getConnection() {
return connection;
}
}
13 / 17

RectangleDao

public class RectangleDao {
RectangleDatabase database;
public RectangleDao(RectangleDatabase database) {
this.database = database;
}
public Connection getConnection(){
return database.getConnection();
}
public List<Rectangle> list() throws SQLException {
//TODO
}
public void insert(Rectangle rectangle) throws SQLException {
//TODO
}
}
14 / 17

RectangleDao - insert

public void insert(Rectangle rectangle) throws SQLException {
String query = "INSERT INTO rectangles(width, height) VALUES(?, ?)";
PreparedStatement insertStatement = getConnection().prepareStatement(query);
insertStatement.setInt(1, rectangle.getWidth());
insertStatement.setInt(2, rectangle.getHeight());
insertStatement.execute();
}
15 / 17

RectangleDao - List

public List<Rectangle> list() throws SQLException {
String query = "SELECT * FROM rectangles";
Statement listStatement = getConnection().createStatement();
ResultSet resultat = listStatement.executeQuery(query);
return toRectangleList(resultat);
}
private List<Rectangle> toRectangleList(ResultSet resultat) throws SQLException {
List<Rectangle> list = new ArrayList<>();
while (resultat.next()){
int id = resultat.getInt("id");
int width = resultat.getInt("width");
int height = resultat.getInt("height");
list.add(new Rectangle(id, width, height));
}
return list;
}
16 / 17

RectangleApp

public class RectangleApp {
public static void main(String[] args) throws SQLException {
Scanner scanner = new Scanner(System.in);
RectangleDatabase database = new RectangleDatabase();
try(Connection connection = database.connect()) {
RectangleDao rectangleDao = new RectangleDao(database);
MainMenu menu = new MainMenu(rectangleDao, scanner);
menu.draw();
}
}
}
17 / 17

Llicència

Pots copiar i redistribuir aquest material seguint la llicència Attribution-NonCommercial-ShareAlike 4.0 International CC BY-NC-SA 4.0, indicant-ne autors originals, l'origen (aquesta web), sense fins comercials i mantenint-ne aquesta la llicència

Autors:

2 / 17
Paused

Help

Keyboard shortcuts

, , Pg Up, k Go to previous slide
, , Pg Dn, Space, j Go to next slide
Home Go to first slide
End Go to last slide
Number + Return Go to specific slide
b / m / f Toggle blackout / mirrored / fullscreen mode
c Clone slideshow
p Toggle presenter mode
t Restart the presentation timer
?, h Toggle this help
Esc Back to slideshow