|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.apache.jackrabbit.core.util.db.ConnectionHelper
public class ConnectionHelper
This class provides convenience methods to execute SQL statements. They can be either executed in isolation
or within the context of a JDBC transaction; the so-called batch mode (use the startBatch()
and endBatch(boolean)
methods for this).
SQLException
, then it is retried. If the block
argument
of the constructor call was false
then it is retried only once. Otherwise the statement is retried
until either it succeeds or the thread is interrupted. This clearly assumes that the only cause of SQLExceptions
is faulty Connections
which are restored eventually. Connection
that is retrieved from the DataSource
in getConnection()
may be broken. This is so because if an internal DataSource
is used,
then this is a commons-dbcp DataSource
with a testWhileIdle
validation strategy (see
the ConnectionFactory
class). Furthermore, if it is a DataSource
obtained through JNDI then we
can make no assumptions about the validation strategy. This means that our retry logic must either assume that
the SQL it tries to execute can do so without errors (i.e., the statement is valid), or it must implement its
own validation strategy to apply. Currently, the former is in place.
Nested Class Summary | |
---|---|
class |
ConnectionHelper.RetryManager<T>
This class encapsulates the logic to retry a method invocation if it threw an SQLException. |
Field Summary | |
---|---|
protected DataSource |
dataSource
|
Constructor Summary | |
---|---|
|
ConnectionHelper(DataSource dataSrc,
boolean block)
|
protected |
ConnectionHelper(DataSource dataSrc,
boolean checkWithUserName,
boolean block)
|
Method Summary | |
---|---|
protected void |
closeResources(Connection con,
Statement stmt,
ResultSet rs)
Closes the given resources given the batchMode state. |
void |
endBatch(boolean commit)
This method always ends the batch mode. |
void |
exec(String sql,
Object... params)
Executes a general SQL statement and immediately closes all resources. |
ResultSet |
exec(String sql,
Object[] params,
boolean returnGeneratedKeys,
int maxRows)
Executes a general SQL statement and returns the ResultSet of the executed statement. |
protected PreparedStatement |
execute(PreparedStatement stmt,
Object[] params)
This method is used by all methods of this class that execute SQL statements. |
protected Connection |
getConnection()
Gets a connection based on the batchMode state of this helper. |
protected boolean |
inBatchMode()
Returns true if we are currently in a batch mode, false otherwise. |
String |
prepareDbIdentifier(String identifier)
A utility method that makes sure that identifier does only consist of characters that are
allowed in names on the target database. |
protected void |
replaceCharacter(StringBuffer escaped,
char c)
Called from prepareDbIdentifier(String) . |
void |
startBatch()
Starts the batch mode. |
boolean |
tableExists(String tableName)
Checks whether the given table exists in the database. |
int |
update(String sql,
Object[] params)
Executes an update or delete statement and returns the update count. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
protected final DataSource dataSource
Constructor Detail |
---|
public ConnectionHelper(DataSource dataSrc, boolean block)
dataSrc
- the DataSource
on which this instance actsblock
- whether the helper should transparently block on DB connection loss (otherwise it retries
once and if that fails throws exception)protected ConnectionHelper(DataSource dataSrc, boolean checkWithUserName, boolean block)
dataSrc
- the DataSource
on which this instance actscheckWithUserName
- whether the username is to be used for the tableExists(String)
methodblock
- whether the helper should transparently block on DB connection loss (otherwise it throws exceptions)Method Detail |
---|
public final String prepareDbIdentifier(String identifier) throws SQLException
identifier
does only consist of characters that are
allowed in names on the target database. Illegal characters will be escaped as necessary.
This method is not affected by the
identifier
- the identifier to convert to a db specific identifier
SQLException
- if an error occursprotected void replaceCharacter(StringBuffer escaped, char c)
prepareDbIdentifier(String)
. Default implementation replaces the illegal
characters with their hexadecimal encoding.
escaped
- the escaped db identifierc
- the character to replaceprotected boolean inBatchMode()
public final boolean tableExists(String tableName) throws SQLException
tableName
- the name of the table
SQLException
- on errorpublic final void startBatch() throws SQLException
SQLException
is thrown, then the batch mode is not started.
Important: clients that call this method must make sure that
endBatch(boolean)
is called eventually.
SQLException
- on errorpublic final void endBatch(boolean commit) throws SQLException
commit
- whether the changes in the batch should be committed or rolled back
SQLException
- if the commit or rollback of the underlying JDBC Connection threw an SQLException
public final void exec(String sql, Object... params) throws SQLException
sql
- an SQL statement stringparams
- the parameters for the SQL statement
SQLException
- on errorpublic final int update(String sql, Object[] params) throws SQLException
sql
- an SQL statement stringparams
- the parameters for the SQL statement
SQLException
- on errorpublic final ResultSet exec(String sql, Object[] params, boolean returnGeneratedKeys, int maxRows) throws SQLException
ResultSet
of the executed statement. The
returned ResultSet
should be closed by clients.
sql
- an SQL statement stringparams
- the parameters for the SQL statementreturnGeneratedKeys
- whether generated keys should be returnedmaxRows
- the maximum number of rows in a potential ResultSet
(0 means no limit)
ResultSet
SQLException
- on errorprotected final Connection getConnection() throws SQLException
batchMode
state of this helper. The connection should be closed
by a call to closeResources(Connection, Statement, ResultSet)
which also takes the batchMode
state into account.
Connection
to use, based on the batch mode state
SQLException
- on errorprotected final void closeResources(Connection con, Statement stmt, ResultSet rs)
batchMode
state.
con
- the Connection
obtained through the getConnection()
methodstmt
- a Statement
rs
- a ResultSet
protected PreparedStatement execute(PreparedStatement stmt, Object[] params) throws SQLException
StreamWrapper
instances. Subclasses may override
this method to do something special with the parameters. E.g., the Oracle10R1ConnectionHelper
overrides it in order to add special blob handling.
stmt
- the PreparedStatement
to executeparams
- the parameters
SQLException
- on error
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |