_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();
}
}
}