package org.nextprot.api.commons.utils;
import org.nextprot.api.commons.exception.NPreconditions;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder;
/**
* Utilitary methods for jdbcTemplate
*
* @author fnikitin
*/
public class JdbcTemplateUtils {
/**
* Insert a row and returns a key number generated for the given column name
*
* @param sql the SQL statement
* @param keyColumnName name of the column that will have a generated key
* @param namedParameters a container of arguments and SQL types to bind to the query
* @param jdbcOperations JDBC operations allowing the use of named parameters
* @return a numeric generated key
*/
public static Number insertAndGetKey(String sql, String keyColumnName, SqlParameterSource namedParameters, NamedParameterJdbcOperations jdbcOperations) {
return insertAndGetKey(sql, keyColumnName, new GeneratedKeyHolder(), namedParameters, jdbcOperations);
}
static Number insertAndGetKey(String sql, String columnName, KeyHolder keyHolder, SqlParameterSource namedParameters, NamedParameterJdbcOperations jdbcOperations) {
NPreconditions.checkNotNull(sql, "undefined SQL query");
NPreconditions.checkTrue(sql.length()>0, "empty SQL query");
NPreconditions.checkNotNull(columnName, "undefined column name");
NPreconditions.checkTrue(columnName.length()>0, "empty column name");
NPreconditions.checkNotNull(keyHolder, "undefined key holder");
NPreconditions.checkNotNull(namedParameters, "undefined SQL parameters");
NPreconditions.checkNotNull(jdbcOperations, "undefined JDBC operations");
int affectedRow = jdbcOperations.update(sql, namedParameters, keyHolder, new String[] { columnName });
NPreconditions.checkTrue(affectedRow == 1, affectedRow+": expected 1 affected row");
NPreconditions.checkNotNull(keyHolder.getKey(), "no key was generated for column '" + columnName + "'");
return keyHolder.getKey();
}
}