Indholdsfortegnelse

Processing DB Connection


  1. Opret en tom sketch.
  2. Opret en mappe code i samme folder som din sketch.
  3. Hent .jar-filen (fx mariadb-java-client-3.5.7.jar).
  4. Læg jar fil i code mappe.
  5. Download nedestående Database.java og gem denne i samme folder som din sketch.
  6. !! OBS !! - Du skal nu rette Database.java således at det passer med din database. (USER, PASSWORD etc.)
  7. Du bør nu kunne bruge MariaDB gennem JDBC Connection i din Sketch.
  8. Hent Simpel Bogdatabase (zip fil)
  9. Pak zip fil ud, og åben i notepad.
  10. Kør SQL i mariaDB client for at oprette database

Øvelse


Test kode

Opret forbindelse

import java.sql.Connection;
import controlP5.*;
 
Database db;
Connection conn;
 
void setup() {
  db = Database.getInstance();
  conn = db.getConnection();
 
  // ..andet kode fx. control P5 m.m.
}

Du kan nu efterfølgende tilgå databasen gennem conn.


Indsæt record

Her indsættes en record i `Books`-tabellen:

 try {
 
    String sql = "INSERT INTO Books (title, author) VALUES(?, ?)";
    PreparedStatement stmt = conn.prepareStatement(sql);
    stmt.setString(1, title);
    stmt.setString(2, author);
    int rows = stmt.executeUpdate();
    stmt.close();
 
    println("Inserted artist: " + title+ " (" + author+ ") - " + rows + " row(s) affected");
  } catch(SQLException e) {
    e.printStackTrace();
  }

Forklaring på try/catch:

Vi bruger try/catch for at håndtere fejl, som kan opstå når vi arbejder med databaser, fx hvis:

Hvis en fejl opstår, stopper programmet ikke brat – i stedet kan fange fejlen (Catch) og vise hvad som skete (`e.printStackTrace()`).


Læs data (query)

Her hentes bøger fra 'Books' table.

  try {
    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery("SELECT title, author FROM Books");
 
    while(rs.next()) {
      String title = rs.getString("title");
      String author = rs.getString("author");
      println(title + ": " + author);
    }
 
    rs.close();
    stmt.close();
  } catch (SQLException e) {
    e.printStackTrace();
  }

try/catch: Samme princip gælder her: databasen kan fejle, fx hvis forespørgslen er forkert eller forbindelsen mistes. try/catch sørger for, at programmet kan håndtere fejlen pænt og ikke crasher.


Tips


Database.java
import java.sql.*;
 
public class Database {
 
  // Singleton-instans
  private static Database instance;
 
  // JDBC-forbindelsen
  private Connection connection;
 
  // === RET DISSE ===
  private static final String HOST = "localhost";
  private static final String DATABASE = "skole_db";
  private static final String USER = "root";
  private static final String PASSWORD = "";
 
  private static final String URL =
    "jdbc:mariadb://" + HOST + ":3306/" + DATABASE + "?useSSL=false";
 
  // Privat constructor (singleton)
  private Database() {
    try {
      connection = DriverManager.getConnection(URL, USER, PASSWORD);
      System.out.println("Database connected");
    } catch (SQLException e) {
      System.out.println("Database connection failed");
      e.printStackTrace();
    }
  }
 
  // Få singleton-instansen
  public static Database getInstance() {
    if (instance == null) {
      instance = new Database();
    }
    return instance;
  }
 
  // Giv adgang til forbindelsen
  public Connection getConnection() {
    return connection;
  }
 
  public void close() {
  try {
    if (connection != null && !connection.isClosed()) {
      connection.close();
      System.out.println("Database closed");
    }
  } catch (SQLException e) {
    e.printStackTrace();
  }
}
}