Ein Data Access Object ist eine objektorientierte Schnittstelle zwischen Programm und Datenbank.
Darin in festgelegt:
- Wie Daten gelesen, und geändert werden (Methoden z.B.
createUser(User user)) - Wie die Daten aus der Datenbank in einem Objekt dargestellt werden
Beispiel

public class User {
private int id;
private String name;
public User() {}
public User(int id, String name) {
this.id = id;
this.name = name;
}
public User(String name) {
this.name = name;
}
public int getId() {return id;}
public void setId(int id) {this.id = id;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
@Override
public String toString() {
return String.format("User{id=%d, name='%s'}", id, name);
}
}import db.DatabaseConnection;
import model.User;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class UserDAO {
// CREATE
public void createUser(User user) {
String sql = "INSERT INTO users (name) VALUES (?)";
try (Connection conn = DatabaseConnection.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, user.getName());
pstmt.executeUpdate();
System.out.println("Benutzer hinzugefügt: " + user.getName());
} catch (SQLException e) {
e.printStackTrace();
}
}
// READ (by ID)
public User getUserById(int id) {
String sql = "SELECT * FROM users WHERE id = ?";
try (Connection conn = DatabaseConnection.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setInt(1, id);
try (ResultSet rs = pstmt.executeQuery()) {
if (rs.next()) {
return new User(rs.getInt("id"), rs.getString("name"));
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
// READ (all)
public List getAllUsers() {
List users = new ArrayList<>();
String sql = "SELECT * FROM users";
try (Connection conn = DatabaseConnection.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
while (rs.next()){
users.add(new User(rs.getInt("id"), rs.getString("name"));
}
} catch (SQLException e) {
e.printStackTrace();
}
return users;
}
// DELETE
public void deleteUser(int id) {
String sql = "DELETE FROM users WHERE id = ?";
try (Connection conn = DatabaseConnection.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setInt(1, id);
int rows = pstmt.executeUpdate();
System.out.println(" " + rows + " Benutzer gelöscht.");
} catch (SQLException e) {
e.printStackTrace();
}
}
// TRANSACTION Beispiel
public void transactionExample() {
try (Connection conn = DatabaseConnection.getConnection()) {
conn.setAutoCommit(false);
try (
PreparedStatement stmt1 = conn.prepareStatement("INSERT INTO users (name) VALUES (?)");) {
stmt1.setString(1, "TestUser");
stmt1.setString(2, "test@demo.com");
stmt1.executeUpdate();
conn.commit();
System.out.println("Transaktion erfolgreich!");
} catch (SQLException e) {
conn.rollback();
System.err.println("Transaktion zurückgerollt: " + e.getMessage());
} finally {
conn.setAutoCommit(true);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}