package com.stacksync.syncservice.db.postgresql;
import static com.stacksync.syncservice.db.DAOUtil.prepareStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.log4j.Logger;
import com.stacksync.syncservice.db.DAOError;
import com.stacksync.syncservice.exceptions.dao.DAOException;
import com.stacksync.syncservice.exceptions.dao.NoRowsAffectedDAOException;
public class PostgresqlDAO {
private static final Logger logger = Logger.getLogger(PostgresqlDAO.class.getName());
protected Connection connection;
public PostgresqlDAO(Connection connection) {
this.connection = connection;
}
protected ResultSet executeQuery(String query, Object[] values) throws DAOException {
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
preparedStatement = prepareStatement(connection, query, false, values);
resultSet = preparedStatement.executeQuery();
} catch (SQLException e) {
logger.error(e);
throw new DAOException(e, DAOError.INTERNAL_SERVER_ERROR);
}
return resultSet;
}
protected Object executeUpdate(String query, Object[] values) throws DAOException {
Object key = null;
PreparedStatement preparedStatement = null;
ResultSet generatedKeys = null;
try {
preparedStatement = prepareStatement(connection, query, true, values);
int affectedRows = preparedStatement.executeUpdate();
if (affectedRows == 0) {
throw new NoRowsAffectedDAOException("Execute update error: no rows affected.");
}
if (query.startsWith("INSERT")) {
generatedKeys = preparedStatement.getGeneratedKeys();
if (generatedKeys.next()) {
key = generatedKeys.getObject(1);
} else {
throw new DAOException("Creating object failed, no generated key obtained.");
}
}
} catch (SQLException e) {
logger.error(e);
throw new DAOException(e, DAOError.INTERNAL_SERVER_ERROR);
}
return key;
}
}