Skip to content
Snippets Groups Projects
_DefaultDAO.java 3.29 KiB
package com.uca.dao;

import com.uca.core.*;
import com.uca.dao.*;
import com.uca.entity.*;
import java.util.*;
import java.sql.*;

public abstract class _DefaultDAO<T extends Entity> extends _Generic<T> {

    /**
     * Nom par défault de la table pour les opérations.
     * Null si ne peut être spécifier
     */
    public abstract String getDefaultTableName();

    /**
     * Sauvegarde une entrée dans la base de données
     */
    public T push(T obj)
    {
        try {
            pushUnsafe(obj);
        } catch (Exception e) {
            e.printStackTrace();
            obj = null;
        }
        return obj;
    }
    public abstract void pushUnsafe(T obj) throws Exception;

    /**
     * Extrait un objet depuis un de la table depuis le résultat d'une requête sql
     * Null si ne contient plus d'objets
     */
    public T extract(ResultSet resultSet)
    {
        try {
            if (resultSet.next()) 
            {
                return extractUnsafe(resultSet);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    public abstract T extractUnsafe(ResultSet resultSet) throws Exception;


    /**
     * Extrait tout les objets de la table
     */
    public List<T> getAll()
    {
        ArrayList<T> entities = new ArrayList<>();
        try {
            PreparedStatement preparedStatement = this.connect
                    .prepareStatement("SELECT * FROM "+getDefaultTableName()+" ORDER BY id ASC;");
            ResultSet resultSet = preparedStatement.executeQuery();
            
            while(true)
            {
                T entity = extract(resultSet);
                if(entity == null) { return entities;}
                entities.add(entity);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return entities;
    }

    @Override
    public T create(T obj)
    {
        try {
            PreparedStatement stmt = this.connect.prepareStatement("insert into "+getDefaultTableName()+" default values;", Statement.RETURN_GENERATED_KEYS);
            
            stmt.executeUpdate();
            ResultSet rs = stmt.getGeneratedKeys();

            if(rs.next())
            {
                obj.setId(rs.getInt(1));
                return push(obj);
            }else { throw new Exception("no id"); }
        } catch (Exception e) {
            e.printStackTrace();
            obj = null;
        }
        return obj;
    }

    @Override
    public void delete(T obj) {
        if(obj != null)
        {
            delete(obj.getId());
        }
    }

    public T getById(int id)
    {
        T entity = null;
        try {
            PreparedStatement stmt = this.connect.prepareStatement("SELECT * FROM "+ getDefaultTableName() +" where id = ?;");
            stmt.setInt(1, id);
            return extract(stmt.executeQuery());
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return entity;
    }
    
    public void delete(int id) {
        try {
            PreparedStatement stmt = this.connect.prepareStatement("DELETE FROM " + getDefaultTableName() +" WHERE id = ?;");
            stmt.setInt(1, id);
            stmt.executeUpdate() ;
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

}