Repository: commons-dbcp Updated Branches: refs/heads/master 8e4a56526 -> bc4cd88aa
Sort members in AB order to make it easier to find stuff. Project: http://git-wip-us.apache.org/repos/asf/commons-dbcp/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-dbcp/commit/bc4cd88a Tree: http://git-wip-us.apache.org/repos/asf/commons-dbcp/tree/bc4cd88a Diff: http://git-wip-us.apache.org/repos/asf/commons-dbcp/diff/bc4cd88a Branch: refs/heads/master Commit: bc4cd88aa7d8343dbb031c65d141f4b021a95d0a Parents: 8e4a565 Author: Gary Gregory <garydgreg...@gmail.com> Authored: Wed Jun 20 08:57:28 2018 -0600 Committer: Gary Gregory <garydgreg...@gmail.com> Committed: Wed Jun 20 08:57:28 2018 -0600 ---------------------------------------------------------------------- .../java/org/apache/commons/dbcp2/PStmtKey.java | 622 +++++++++---------- 1 file changed, 311 insertions(+), 311 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/bc4cd88a/src/main/java/org/apache/commons/dbcp2/PStmtKey.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/dbcp2/PStmtKey.java b/src/main/java/org/apache/commons/dbcp2/PStmtKey.java index 81ff896..e118a2c 100644 --- a/src/main/java/org/apache/commons/dbcp2/PStmtKey.java +++ b/src/main/java/org/apache/commons/dbcp2/PStmtKey.java @@ -31,6 +31,105 @@ import org.apache.commons.dbcp2.PoolingConnection.StatementType; public class PStmtKey { /** + * Builder for prepareCall(String sql). + */ + private class PreparedCallSQL implements StatementBuilder { + @Override + public Statement createStatement(final Connection connection) throws SQLException { + return connection.prepareCall(sql); + } + } + + /** + * Builder for prepareCall(String sql, int resultSetType, int resultSetConcurrency). + */ + private class PreparedCallWithResultSetConcurrency implements StatementBuilder { + @Override + public Statement createStatement(final Connection connection) throws SQLException { + return connection.prepareCall(sql, resultSetType.intValue(), resultSetConcurrency.intValue()); + } + } + + /** + * Builder for prepareCall(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability). + */ + private class PreparedCallWithResultSetHoldability implements StatementBuilder { + @Override + public Statement createStatement(final Connection connection) throws SQLException { + return connection.prepareCall(sql, resultSetType.intValue(), resultSetConcurrency.intValue(), + resultSetHoldability.intValue()); + } + } + + /** + * Builder for prepareStatement(String sql). + */ + private class PreparedStatementSQL implements StatementBuilder { + @Override + public Statement createStatement(final Connection connection) throws SQLException { + return connection.prepareStatement(sql); + } + } + + /** + * Builder for prepareStatement(String sql, int autoGeneratedKeys). + */ + private class PreparedStatementWithAutoGeneratedKeys implements StatementBuilder { + @Override + public Statement createStatement(final Connection connection) throws SQLException { + return connection.prepareStatement(sql, autoGeneratedKeys.intValue()); + } + } + + /** + * Builder for prepareStatement(String sql, int[] columnIndexes). + */ + private class PreparedStatementWithColumnIndexes implements StatementBuilder { + @Override + public Statement createStatement(final Connection connection) throws SQLException { + return connection.prepareStatement(sql, columnIndexes); + } + } + + /** + * Builder for prepareStatement(String sql, String[] columnNames). + */ + private class PreparedStatementWithColumnNames implements StatementBuilder { + @Override + public Statement createStatement(final Connection connection) throws SQLException { + return connection.prepareStatement(sql, columnNames); + } + } + + /** + * Builder for prepareStatement(String sql, int resultSetType, int resultSetConcurrency). + */ + private class PreparedStatementWithResultSetConcurrency implements StatementBuilder { + @Override + public Statement createStatement(final Connection connection) throws SQLException { + return connection.prepareStatement(sql, resultSetType.intValue(), resultSetConcurrency.intValue()); + } + } + + /** + * Builder for prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability). + */ + private class PreparedStatementWithResultSetHoldability implements StatementBuilder { + @Override + public Statement createStatement(final Connection connection) throws SQLException { + return connection.prepareStatement(sql, resultSetType.intValue(), resultSetConcurrency.intValue(), + resultSetHoldability.intValue()); + } + } + + /** + * Interface for Prepared or Callable Statement. + */ + private interface StatementBuilder { + public Statement createStatement(Connection connection) throws SQLException; + } + + /** * SQL defining Prepared or Callable Statement */ private final String sql; @@ -95,11 +194,15 @@ public class PStmtKey { * * @param sql * The SQL statement. - * @param catalog - * The catalog. + * @param resultSetType + * A result set type; one of <code>ResultSet.TYPE_FORWARD_ONLY</code>, + * <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>. + * @param resultSetConcurrency + * A concurrency type; one of <code>ResultSet.CONCUR_READ_ONLY</code> or + * <code>ResultSet.CONCUR_UPDATABLE</code>. */ - public PStmtKey(final String sql, final String catalog) { - this(sql, catalog, StatementType.PREPARED_STATEMENT); + public PStmtKey(final String sql, final int resultSetType, final int resultSetConcurrency) { + this(sql, null, resultSetType, resultSetConcurrency, StatementType.PREPARED_STATEMENT); } /** @@ -109,25 +212,9 @@ public class PStmtKey { * The SQL statement. * @param catalog * The catalog. - * @param statementType - * The SQL statement type, prepared or callable. */ - public PStmtKey(final String sql, final String catalog, final StatementType statementType) { - this.sql = sql; - this.catalog = catalog; - this.statementType = statementType; - this.autoGeneratedKeys = null; - this.columnIndexes = null; - this.columnNames = null; - this.resultSetType = null; - this.resultSetConcurrency = null; - this.resultSetHoldability = null; - // create builder - if (statementType == StatementType.PREPARED_STATEMENT) { - this.builder = new PreparedStatementSQL(); - } else if (statementType == StatementType.CALLABLE_STATEMENT) { - this.builder = new PreparedCallSQL(); - } + public PStmtKey(final String sql, final String catalog) { + this(sql, catalog, StatementType.PREPARED_STATEMENT); } /** @@ -152,54 +239,15 @@ public class PStmtKey { * The SQL statement. * @param catalog * The catalog. - * @param statementType - * The SQL statement type, prepared or callable. - * @param autoGeneratedKeys - * A flag indicating whether auto-generated keys should be returned; one of - * <code>Statement.RETURN_GENERATED_KEYS</code> or <code>Statement.NO_GENERATED_KEYS</code>. - */ - public PStmtKey(final String sql, final String catalog, final StatementType statementType, - final Integer autoGeneratedKeys) { - this.sql = sql; - this.catalog = catalog; - this.statementType = statementType; - this.autoGeneratedKeys = autoGeneratedKeys; - this.columnIndexes = null; - this.columnNames = null; - this.resultSetType = null; - this.resultSetConcurrency = null; - this.resultSetHoldability = null; - // create builder - if (statementType == StatementType.PREPARED_STATEMENT) { - this.builder = new PreparedStatementWithAutoGeneratedKeys(); - } else if (statementType == StatementType.CALLABLE_STATEMENT) { - this.builder = new PreparedCallSQL(); - } - } - - /** - * Constructs a key to uniquely identify a prepared statement. - * - * @param sql - * The SQL statement. - * @param catalog - * The catalog. - * @param columnIndexes - * An array of column indexes indicating the columns that should be returned from the inserted row or - * rows. + * @param resultSetType + * A result set type; one of <code>ResultSet.TYPE_FORWARD_ONLY</code>, + * <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>. + * @param resultSetConcurrency + * A concurrency type; one of <code>ResultSet.CONCUR_READ_ONLY</code> or + * <code>ResultSet.CONCUR_UPDATABLE</code>. */ - public PStmtKey(final String sql, final String catalog, final int[] columnIndexes) { - this.sql = sql; - this.catalog = catalog; - this.statementType = StatementType.PREPARED_STATEMENT; - this.autoGeneratedKeys = null; - this.columnIndexes = columnIndexes == null ? null : Arrays.copyOf(columnIndexes, columnIndexes.length); - this.columnNames = null; - this.resultSetType = null; - this.resultSetConcurrency = null; - this.resultSetHoldability = null; - // create builder - this.builder = new PreparedStatementWithColumnIndexes(); + public PStmtKey(final String sql, final String catalog, final int resultSetType, final int resultSetConcurrency) { + this(sql, catalog, resultSetType, resultSetConcurrency, StatementType.PREPARED_STATEMENT); } /** @@ -209,37 +257,19 @@ public class PStmtKey { * The SQL statement. * @param catalog * The catalog. - * @param columnNames - * An array of column names indicating the columns that should be returned from the inserted row or rows. - */ - public PStmtKey(final String sql, final String catalog, final String[] columnNames) { - this.sql = sql; - this.catalog = catalog; - this.statementType = StatementType.PREPARED_STATEMENT; - this.autoGeneratedKeys = null; - this.columnIndexes = null; - this.columnNames = columnNames == null ? null : Arrays.copyOf(columnNames, columnNames.length); - this.resultSetType = null; - this.resultSetConcurrency = null; - this.resultSetHoldability = null; - // create builder - builder = new PreparedStatementWithColumnNames(); - } - - /** - * Constructs a key to uniquely identify a prepared statement. - * - * @param sql - * The SQL statement. * @param resultSetType - * A result set type; one of <code>ResultSet.TYPE_FORWARD_ONLY</code>, + * a result set type; one of <code>ResultSet.TYPE_FORWARD_ONLY</code>, * <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>. * @param resultSetConcurrency * A concurrency type; one of <code>ResultSet.CONCUR_READ_ONLY</code> or - * <code>ResultSet.CONCUR_UPDATABLE</code>. + * <code>ResultSet.CONCUR_UPDATABLE</code> + * @param resultSetHoldability + * One of the following <code>ResultSet</code> constants: <code>ResultSet.HOLD_CURSORS_OVER_COMMIT</code> + * or <code>ResultSet.CLOSE_CURSORS_AT_COMMIT</code>. */ - public PStmtKey(final String sql, final int resultSetType, final int resultSetConcurrency) { - this(sql, null, resultSetType, resultSetConcurrency, StatementType.PREPARED_STATEMENT); + public PStmtKey(final String sql, final String catalog, final int resultSetType, final int resultSetConcurrency, + final int resultSetHoldability) { + this(sql, catalog, resultSetType, resultSetConcurrency, resultSetHoldability, StatementType.PREPARED_STATEMENT); } /** @@ -250,14 +280,34 @@ public class PStmtKey { * @param catalog * The catalog. * @param resultSetType - * A result set type; one of <code>ResultSet.TYPE_FORWARD_ONLY</code>, - * <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>. + * a result set type; one of <code>ResultSet.TYPE_FORWARD_ONLY</code>, + * <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or <code>ResultSet.TYPE_SCROLL_SENSITIVE</code> * @param resultSetConcurrency * A concurrency type; one of <code>ResultSet.CONCUR_READ_ONLY</code> or * <code>ResultSet.CONCUR_UPDATABLE</code>. + * @param resultSetHoldability + * One of the following <code>ResultSet</code> constants: <code>ResultSet.HOLD_CURSORS_OVER_COMMIT</code> + * or <code>ResultSet.CLOSE_CURSORS_AT_COMMIT</code>. + * @param statementType + * The SQL statement type, prepared or callable. */ - public PStmtKey(final String sql, final String catalog, final int resultSetType, final int resultSetConcurrency) { - this(sql, catalog, resultSetType, resultSetConcurrency, StatementType.PREPARED_STATEMENT); + public PStmtKey(final String sql, final String catalog, final int resultSetType, final int resultSetConcurrency, + final int resultSetHoldability, final StatementType statementType) { + this.sql = sql; + this.catalog = catalog; + this.resultSetType = Integer.valueOf(resultSetType); + this.resultSetConcurrency = Integer.valueOf(resultSetConcurrency); + this.resultSetHoldability = Integer.valueOf(resultSetHoldability); + this.statementType = statementType; + this.autoGeneratedKeys = null; + this.columnIndexes = null; + this.columnNames = null; + // create builder + if (statementType == StatementType.PREPARED_STATEMENT) { + this.builder = new PreparedStatementWithResultSetHoldability(); + } else if (statementType == StatementType.CALLABLE_STATEMENT) { + this.builder = new PreparedCallWithResultSetHoldability(); + } } /** @@ -302,19 +352,22 @@ public class PStmtKey { * The SQL statement. * @param catalog * The catalog. - * @param resultSetType - * a result set type; one of <code>ResultSet.TYPE_FORWARD_ONLY</code>, - * <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>. - * @param resultSetConcurrency - * A concurrency type; one of <code>ResultSet.CONCUR_READ_ONLY</code> or - * <code>ResultSet.CONCUR_UPDATABLE</code> - * @param resultSetHoldability - * One of the following <code>ResultSet</code> constants: <code>ResultSet.HOLD_CURSORS_OVER_COMMIT</code> - * or <code>ResultSet.CLOSE_CURSORS_AT_COMMIT</code>. + * @param columnIndexes + * An array of column indexes indicating the columns that should be returned from the inserted row or + * rows. */ - public PStmtKey(final String sql, final String catalog, final int resultSetType, final int resultSetConcurrency, - final int resultSetHoldability) { - this(sql, catalog, resultSetType, resultSetConcurrency, resultSetHoldability, StatementType.PREPARED_STATEMENT); + public PStmtKey(final String sql, final String catalog, final int[] columnIndexes) { + this.sql = sql; + this.catalog = catalog; + this.statementType = StatementType.PREPARED_STATEMENT; + this.autoGeneratedKeys = null; + this.columnIndexes = columnIndexes == null ? null : Arrays.copyOf(columnIndexes, columnIndexes.length); + this.columnNames = null; + this.resultSetType = null; + this.resultSetConcurrency = null; + this.resultSetHoldability = null; + // create builder + this.builder = new PreparedStatementWithColumnIndexes(); } /** @@ -324,120 +377,97 @@ public class PStmtKey { * The SQL statement. * @param catalog * The catalog. - * @param resultSetType - * a result set type; one of <code>ResultSet.TYPE_FORWARD_ONLY</code>, - * <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or <code>ResultSet.TYPE_SCROLL_SENSITIVE</code> - * @param resultSetConcurrency - * A concurrency type; one of <code>ResultSet.CONCUR_READ_ONLY</code> or - * <code>ResultSet.CONCUR_UPDATABLE</code>. - * @param resultSetHoldability - * One of the following <code>ResultSet</code> constants: <code>ResultSet.HOLD_CURSORS_OVER_COMMIT</code> - * or <code>ResultSet.CLOSE_CURSORS_AT_COMMIT</code>. * @param statementType * The SQL statement type, prepared or callable. */ - public PStmtKey(final String sql, final String catalog, final int resultSetType, final int resultSetConcurrency, - final int resultSetHoldability, final StatementType statementType) { + public PStmtKey(final String sql, final String catalog, final StatementType statementType) { this.sql = sql; this.catalog = catalog; - this.resultSetType = Integer.valueOf(resultSetType); - this.resultSetConcurrency = Integer.valueOf(resultSetConcurrency); - this.resultSetHoldability = Integer.valueOf(resultSetHoldability); this.statementType = statementType; this.autoGeneratedKeys = null; this.columnIndexes = null; this.columnNames = null; + this.resultSetType = null; + this.resultSetConcurrency = null; + this.resultSetHoldability = null; // create builder if (statementType == StatementType.PREPARED_STATEMENT) { - this.builder = new PreparedStatementWithResultSetHoldability(); + this.builder = new PreparedStatementSQL(); } else if (statementType == StatementType.CALLABLE_STATEMENT) { - this.builder = new PreparedCallWithResultSetHoldability(); + this.builder = new PreparedCallSQL(); } } /** - * Gets the SQL statement. - * - * @return the SQL statement. - */ - public String getSql() { - return sql; - } - - /** - * Gets the result set type, one of <code>ResultSet.TYPE_FORWARD_ONLY</code>, - * <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>. - * - * @return the result set type. - */ - public Integer getResultSetType() { - return resultSetType; - } - - /** - * Gets the result set concurrency type; one of <code>ResultSet.CONCUR_READ_ONLY</code> or - * <code>ResultSet.CONCUR_UPDATABLE</code>. - * - * @return The result set concurrency type. - */ - public Integer getResultSetConcurrency() { - return resultSetConcurrency; - } - - /** - * Gets the result set holdability, one of the following <code>ResultSet</code> constants: - * <code>ResultSet.HOLD_CURSORS_OVER_COMMIT</code> or <code>ResultSet.CLOSE_CURSORS_AT_COMMIT</code>. - * - * @return The result set holdability. - */ - public Integer getResultSetHoldability() { - return resultSetHoldability; - } - - /** - * Gets a flag indicating whether auto-generated keys should be returned; one of - * <code>Statement.RETURN_GENERATED_KEYS</code> or <code>Statement.NO_GENERATED_KEYS</code>. - * - * @return a flag indicating whether auto-generated keys should be returned. - */ - public Integer getAutoGeneratedKeys() { - return autoGeneratedKeys; - } - - /** - * Gets an array of column indexes indicating the columns that should be returned from the inserted row or rows. - * - * @return An array of column indexes. - */ - public int[] getColumnIndexes() { - return columnIndexes; - } - - /** - * Gets an array of column names indicating the columns that should be returned from the inserted row or rows. + * Constructs a key to uniquely identify a prepared statement. * - * @return An array of column names. + * @param sql + * The SQL statement. + * @param catalog + * The catalog. + * @param statementType + * The SQL statement type, prepared or callable. + * @param autoGeneratedKeys + * A flag indicating whether auto-generated keys should be returned; one of + * <code>Statement.RETURN_GENERATED_KEYS</code> or <code>Statement.NO_GENERATED_KEYS</code>. */ - public String[] getColumnNames() { - return columnNames; + public PStmtKey(final String sql, final String catalog, final StatementType statementType, + final Integer autoGeneratedKeys) { + this.sql = sql; + this.catalog = catalog; + this.statementType = statementType; + this.autoGeneratedKeys = autoGeneratedKeys; + this.columnIndexes = null; + this.columnNames = null; + this.resultSetType = null; + this.resultSetConcurrency = null; + this.resultSetHoldability = null; + // create builder + if (statementType == StatementType.PREPARED_STATEMENT) { + this.builder = new PreparedStatementWithAutoGeneratedKeys(); + } else if (statementType == StatementType.CALLABLE_STATEMENT) { + this.builder = new PreparedCallSQL(); + } } /** - * The catalog. + * Constructs a key to uniquely identify a prepared statement. * - * @return The catalog. + * @param sql + * The SQL statement. + * @param catalog + * The catalog. + * @param columnNames + * An array of column names indicating the columns that should be returned from the inserted row or rows. */ - public String getCatalog() { - return catalog; + public PStmtKey(final String sql, final String catalog, final String[] columnNames) { + this.sql = sql; + this.catalog = catalog; + this.statementType = StatementType.PREPARED_STATEMENT; + this.autoGeneratedKeys = null; + this.columnIndexes = null; + this.columnNames = columnNames == null ? null : Arrays.copyOf(columnNames, columnNames.length); + this.resultSetType = null; + this.resultSetConcurrency = null; + this.resultSetHoldability = null; + // create builder + builder = new PreparedStatementWithColumnNames(); } /** - * The SQL statement type. + * Creates a new Statement from the given Connection. * - * @return The SQL statement type. + * @param connection + * The Connection to use to create the statement. + * @return The statement. + * @throws SQLException + * Thrown when there is a problem creating the statement. */ - public StatementType getStmtType() { - return statementType; + public Statement createStatement(final Connection connection) throws SQLException { + if (builder == null) { + throw new IllegalStateException("Prepared statement key is invalid."); + } + return builder.createStatement(connection); } @Override @@ -506,158 +536,128 @@ public class PStmtKey { return true; } - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + (catalog == null ? 0 : catalog.hashCode()); - result = prime * result + (resultSetConcurrency == null ? 0 : resultSetConcurrency.hashCode()); - result = prime * result + (resultSetType == null ? 0 : resultSetType.hashCode()); - result = prime * result + (resultSetHoldability == null ? 0 : resultSetHoldability.hashCode()); - result = prime * result + (sql == null ? 0 : sql.hashCode()); - result = prime * result + (autoGeneratedKeys == null ? 0 : autoGeneratedKeys.hashCode()); - result = prime * result + Arrays.hashCode(columnIndexes); - result = prime * result + Arrays.hashCode(columnNames); - result = prime * result + statementType.hashCode(); - return result; - } - - @Override - public String toString() { - final StringBuffer buf = new StringBuffer(); - buf.append("PStmtKey: sql="); - buf.append(sql); - buf.append(", catalog="); - buf.append(catalog); - buf.append(", resultSetType="); - buf.append(resultSetType); - buf.append(", resultSetConcurrency="); - buf.append(resultSetConcurrency); - buf.append(", resultSetHoldability="); - buf.append(resultSetHoldability); - buf.append(", autoGeneratedKeys="); - buf.append(autoGeneratedKeys); - buf.append(", columnIndexes="); - buf.append(Arrays.toString(columnIndexes)); - buf.append(", columnNames="); - buf.append(Arrays.toString(columnNames)); - buf.append(", statementType="); - buf.append(statementType); - return buf.toString(); - } - /** - * Creates a new Statement from the given Connection. + * Gets a flag indicating whether auto-generated keys should be returned; one of + * <code>Statement.RETURN_GENERATED_KEYS</code> or <code>Statement.NO_GENERATED_KEYS</code>. * - * @param connection - * The Connection to use to create the statement. - * @return The statement. - * @throws SQLException - * Thrown when there is a problem creating the statement. + * @return a flag indicating whether auto-generated keys should be returned. */ - public Statement createStatement(final Connection connection) throws SQLException { - if (builder == null) { - throw new IllegalStateException("Prepared statement key is invalid."); - } - return builder.createStatement(connection); + public Integer getAutoGeneratedKeys() { + return autoGeneratedKeys; } /** - * Interface for Prepared or Callable Statement. + * The catalog. + * + * @return The catalog. */ - private interface StatementBuilder { - public Statement createStatement(Connection connection) throws SQLException; + public String getCatalog() { + return catalog; } /** - * Builder for prepareStatement(String sql). + * Gets an array of column indexes indicating the columns that should be returned from the inserted row or rows. + * + * @return An array of column indexes. */ - private class PreparedStatementSQL implements StatementBuilder { - @Override - public Statement createStatement(final Connection connection) throws SQLException { - return connection.prepareStatement(sql); - } + public int[] getColumnIndexes() { + return columnIndexes; } /** - * Builder for prepareStatement(String sql, int autoGeneratedKeys). + * Gets an array of column names indicating the columns that should be returned from the inserted row or rows. + * + * @return An array of column names. */ - private class PreparedStatementWithAutoGeneratedKeys implements StatementBuilder { - @Override - public Statement createStatement(final Connection connection) throws SQLException { - return connection.prepareStatement(sql, autoGeneratedKeys.intValue()); - } + public String[] getColumnNames() { + return columnNames; } /** - * Builder for prepareStatement(String sql, int[] columnIndexes). + * Gets the result set concurrency type; one of <code>ResultSet.CONCUR_READ_ONLY</code> or + * <code>ResultSet.CONCUR_UPDATABLE</code>. + * + * @return The result set concurrency type. */ - private class PreparedStatementWithColumnIndexes implements StatementBuilder { - @Override - public Statement createStatement(final Connection connection) throws SQLException { - return connection.prepareStatement(sql, columnIndexes); - } + public Integer getResultSetConcurrency() { + return resultSetConcurrency; } /** - * Builder for prepareStatement(String sql, int resultSetType, int resultSetConcurrency). + * Gets the result set holdability, one of the following <code>ResultSet</code> constants: + * <code>ResultSet.HOLD_CURSORS_OVER_COMMIT</code> or <code>ResultSet.CLOSE_CURSORS_AT_COMMIT</code>. + * + * @return The result set holdability. */ - private class PreparedStatementWithResultSetConcurrency implements StatementBuilder { - @Override - public Statement createStatement(final Connection connection) throws SQLException { - return connection.prepareStatement(sql, resultSetType.intValue(), resultSetConcurrency.intValue()); - } + public Integer getResultSetHoldability() { + return resultSetHoldability; } /** - * Builder for prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability). + * Gets the result set type, one of <code>ResultSet.TYPE_FORWARD_ONLY</code>, + * <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>. + * + * @return the result set type. */ - private class PreparedStatementWithResultSetHoldability implements StatementBuilder { - @Override - public Statement createStatement(final Connection connection) throws SQLException { - return connection.prepareStatement(sql, resultSetType.intValue(), resultSetConcurrency.intValue(), - resultSetHoldability.intValue()); - } + public Integer getResultSetType() { + return resultSetType; } /** - * Builder for prepareStatement(String sql, String[] columnNames). + * Gets the SQL statement. + * + * @return the SQL statement. */ - private class PreparedStatementWithColumnNames implements StatementBuilder { - @Override - public Statement createStatement(final Connection connection) throws SQLException { - return connection.prepareStatement(sql, columnNames); - } + public String getSql() { + return sql; } /** - * Builder for prepareCall(String sql). + * The SQL statement type. + * + * @return The SQL statement type. */ - private class PreparedCallSQL implements StatementBuilder { - @Override - public Statement createStatement(final Connection connection) throws SQLException { - return connection.prepareCall(sql); - } + public StatementType getStmtType() { + return statementType; } - /** - * Builder for prepareCall(String sql, int resultSetType, int resultSetConcurrency). - */ - private class PreparedCallWithResultSetConcurrency implements StatementBuilder { - @Override - public Statement createStatement(final Connection connection) throws SQLException { - return connection.prepareCall(sql, resultSetType.intValue(), resultSetConcurrency.intValue()); - } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (catalog == null ? 0 : catalog.hashCode()); + result = prime * result + (resultSetConcurrency == null ? 0 : resultSetConcurrency.hashCode()); + result = prime * result + (resultSetType == null ? 0 : resultSetType.hashCode()); + result = prime * result + (resultSetHoldability == null ? 0 : resultSetHoldability.hashCode()); + result = prime * result + (sql == null ? 0 : sql.hashCode()); + result = prime * result + (autoGeneratedKeys == null ? 0 : autoGeneratedKeys.hashCode()); + result = prime * result + Arrays.hashCode(columnIndexes); + result = prime * result + Arrays.hashCode(columnNames); + result = prime * result + statementType.hashCode(); + return result; } - /** - * Builder for prepareCall(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability). - */ - private class PreparedCallWithResultSetHoldability implements StatementBuilder { - @Override - public Statement createStatement(final Connection connection) throws SQLException { - return connection.prepareCall(sql, resultSetType.intValue(), resultSetConcurrency.intValue(), - resultSetHoldability.intValue()); - } + @Override + public String toString() { + final StringBuffer buf = new StringBuffer(); + buf.append("PStmtKey: sql="); + buf.append(sql); + buf.append(", catalog="); + buf.append(catalog); + buf.append(", resultSetType="); + buf.append(resultSetType); + buf.append(", resultSetConcurrency="); + buf.append(resultSetConcurrency); + buf.append(", resultSetHoldability="); + buf.append(resultSetHoldability); + buf.append(", autoGeneratedKeys="); + buf.append(autoGeneratedKeys); + buf.append(", columnIndexes="); + buf.append(Arrays.toString(columnIndexes)); + buf.append(", columnNames="); + buf.append(Arrays.toString(columnNames)); + buf.append(", statementType="); + buf.append(statementType); + return buf.toString(); } }