org.hibernate.jdbc.Batcher Maven / Gradle / Ivy
//$Id: Batcher.java 10040 2006-06-22 19:51:43Z [email protected] $
package org.hibernate.jdbc;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.hibernate.HibernateException;
import org.hibernate.ScrollMode;
import org.hibernate.dialect.Dialect;
/**
* Manages PreparedStatements for a session. Abstracts JDBC
* batching to maintain the illusion that a single logical batch
* exists for the whole session, even when batching is disabled.
* Provides transparent PreparedStatement caching.
*
* @see java.sql.PreparedStatement
* @see org.hibernate.impl.SessionImpl
* @author Gavin King
*/
public interface Batcher {
/**
* Get a prepared statement for use in loading / querying. If not explicitly
* released by closeQueryStatement(), it will be released when the
* session is closed or disconnected.
*/
public PreparedStatement prepareQueryStatement(String sql, boolean scrollable, ScrollMode scrollMode) throws SQLException, HibernateException;
/**
* Close a prepared statement opened with prepareQueryStatement()
*/
public void closeQueryStatement(PreparedStatement ps, ResultSet rs) throws SQLException;
/**
* Get a prepared statement for use in loading / querying. If not explicitly
* released by closeQueryStatement(), it will be released when the
* session is closed or disconnected.
*/
public CallableStatement prepareCallableQueryStatement(String sql, boolean scrollable, ScrollMode scrollMode) throws SQLException, HibernateException;
/**
* Get a non-batchable prepared statement to use for selecting. Does not
* result in execution of the current batch.
*/
public PreparedStatement prepareSelectStatement(String sql) throws SQLException, HibernateException;
/**
* Get a non-batchable prepared statement to use for inserting / deleting / updating,
* using JDBC3 getGeneratedKeys ({@link Connection#prepareStatement(String, int)}).
*
* Must be explicitly released by {@link #closeStatement} after use.
*/
public PreparedStatement prepareStatement(String sql, boolean useGetGeneratedKeys) throws SQLException, HibernateException;
/**
* Get a non-batchable prepared statement to use for inserting / deleting / updating.
* using JDBC3 getGeneratedKeys ({@link Connection#prepareStatement(String, String[])}).
*
* Must be explicitly released by {@link #closeStatement} after use.
*/
public PreparedStatement prepareStatement(String sql, String[] columnNames) throws SQLException, HibernateException;
/**
* Get a non-batchable prepared statement to use for inserting / deleting / updating.
*
* Must be explicitly released by {@link #closeStatement} after use.
*/
public PreparedStatement prepareStatement(String sql) throws SQLException, HibernateException;
/**
* Get a non-batchable callable statement to use for inserting / deleting / updating.
*
* Must be explicitly released by {@link #closeStatement} after use.
*/
public CallableStatement prepareCallableStatement(String sql) throws SQLException, HibernateException;
/**
* Close a prepared or callable statement opened using prepareStatement() or prepareCallableStatement()
*/
public void closeStatement(PreparedStatement ps) throws SQLException;
/**
* Get a batchable prepared statement to use for inserting / deleting / updating
* (might be called many times before a single call to executeBatch()).
* After setting parameters, call addToBatch - do not execute the
* statement explicitly.
* @see Batcher#addToBatch
*/
public PreparedStatement prepareBatchStatement(String sql) throws SQLException, HibernateException;
/**
* Get a batchable callable statement to use for inserting / deleting / updating
* (might be called many times before a single call to executeBatch()).
* After setting parameters, call addToBatch - do not execute the
* statement explicitly.
* @see Batcher#addToBatch
*/
public CallableStatement prepareBatchCallableStatement(String sql) throws SQLException, HibernateException;
/**
* Add an insert / delete / update to the current batch (might be called multiple times
* for single prepareBatchStatement())
*/
public void addToBatch(Expectation expectation) throws SQLException, HibernateException;
/**
* Execute the batch
*/
public void executeBatch() throws HibernateException;
/**
* Close any query statements that were left lying around
*/
public void closeStatements();
/**
* Execute the statement and return the result set
*/
public ResultSet getResultSet(PreparedStatement ps) throws SQLException;
/**
* Execute the statement and return the result set from a callable statement
*/
public ResultSet getResultSet(CallableStatement ps, Dialect dialect) throws SQLException;
/**
* Must be called when an exception occurs
* @param sqle the (not null) exception that is the reason for aborting
*/
public void abortBatch(SQLException sqle);
/**
* Cancel the current query statement
*/
public void cancelLastQuery() throws HibernateException;
public boolean hasOpenResources();
public String openResourceStatsAsString();
// TODO : remove these last two as batcher is no longer managing connections
/**
* Obtain a JDBC connection
*/
public Connection openConnection() throws HibernateException;
/**
* Dispose of the JDBC connection
*/
public void closeConnection(Connection conn) throws HibernateException;
/**
* Set the transaction timeout to seconds later
* than the current system time.
*/
public void setTransactionTimeout(int seconds);
/**
* Unset the transaction timeout, called after the end of a
* transaction.
*/
public void unsetTransactionTimeout();
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy