Back to portfolio

MEI Application – Java + SQL

Desktop app for micro-entrepreneur (MEI) management, with full CRUD and SQL persistence.

PT EN

Project summary

This application was built in Java with SQL persistence to help a micro-entrepreneur manage clients, services and invoices. It is an academic project, but the structure follows real-world patterns.

Java MySQL/PostgreSQL MVC

Data model (simplified)

CLIENTE(id, nome, nif, email, telefone)
SERVICO(id, descricao, preco_base)
FATURA(id, id_cliente, data_emissao, total)
ITENS_FATURA(id_fatura, id_servico, quantidade, preco_unitario)

Java entity example

public class Cliente {
    private Long id;
    private String nome;
    private String nif;
    private String email;
    private String telefone;

    // getters, setters, constructors...

    @Override
    public String toString() {
        return nome + " (" + nif + ")";
    }
}

DAO example (ClienteDAO)

public class ClienteDAO {

    private final Connection conn;

    public ClienteDAO(Connection conn) {
        this.conn = conn;
    }

    public void insert(Cliente c) throws SQLException {
        String sql = "INSERT INTO CLIENTE (nome, nif, email, telefone) VALUES (?,?,?,?)";
        try (PreparedStatement ps = conn.prepareStatement(sql)) {
            ps.setString(1, c.getNome());
            ps.setString(2, c.getNif());
            ps.setString(3, c.getEmail());
            ps.setString(4, c.getTelefone());
            ps.executeUpdate();
        }
    }

    public List<Cliente> list() throws SQLException {
        List<Cliente> list = new ArrayList<>();
        String sql = "SELECT * FROM CLIENTE ORDER BY nome";
        try (PreparedStatement ps = conn.prepareStatement(sql);
             ResultSet rs = ps.executeQuery()) {
            while (rs.next()) {
                Cliente c = new Cliente();
                c.setId(rs.getLong("id"));
                c.setNome(rs.getString("nome"));
                c.setNif(rs.getString("nif"));
                c.setEmail(rs.getString("email"));
                c.setTelefone(rs.getString("telefone"));
                list.add(c);
            }
        }
        return list;
    }
}