You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by dg...@apache.org on 2003/07/10 02:27:30 UTC

cvs commit: jakarta-commons-sandbox/mapper/src/share/org/apache/commons/mapper/jdbc JdbcHelper.java

dgraham     2003/07/09 17:27:30

  Modified:    mapper/src/share/org/apache/commons/mapper/jdbc
                        JdbcHelper.java
  Log:
  Added getConnection() method and made DataSource protected.
  
  Revision  Changes    Path
  1.5       +397 -375  jakarta-commons-sandbox/mapper/src/share/org/apache/commons/mapper/jdbc/JdbcHelper.java
  
  Index: JdbcHelper.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/mapper/src/share/org/apache/commons/mapper/jdbc/JdbcHelper.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- JdbcHelper.java	10 Jun 2003 04:14:31 -0000	1.4
  +++ JdbcHelper.java	10 Jul 2003 00:27:29 -0000	1.5
  @@ -81,377 +81,399 @@
    */
   public class JdbcHelper {
   
  -    /**
  -     * An implementation of StatementPreparer that does nothing.  Useful when there
  -     * are no replacement parameters to be set on the PreparedStatement.
  -     */
  -    private static final StatementPreparer NULL_PREPARER = new StatementPreparer() {
  -        public void prepareStatement(PreparedStatement stmt, Object obj)
  -            throws SQLException {
  -            ; // do nothing
  -        }
  -    };
  -
  -    /**
  -     * An implementation of StatementPreparer that fills a PreparedStatement 
  -     * with values from an Object[].
  -     */
  -    private static final StatementPreparer ARRAY_PREPARER =
  -        new StatementPreparer() {
  -        public void prepareStatement(PreparedStatement stmt, Object obj)
  -            throws SQLException {
  -
  -            Object[] args = (Object[]) obj;
  -            for (int i = 0; i < args.length; i++) {
  -                stmt.setObject(i + 1, args[i]);
  -            }
  -        }
  -    };
  -
  -    private DataSource ds = null;
  -
  -    /**
  -     * Constructor for JdbcHelper.
  -     * @param ds The DataSource to get Connections from.
  -     */
  -    public JdbcHelper(DataSource ds) {
  -        super();
  -        this.ds = ds;
  -    }
  -
  -    /**
  -     * Executes the given INSERT, UPDATE, or DELETE SQL statement.  The 
  -     * statement is executed in it's own transaction that will be committed or rolled 
  -     * back depending on any SQLExceptions thrown.
  -     * @param sql The SQL statement to execute.
  -     * @param preparer Initializes the PreparedStatement's IN (ie. '?') parameters.
  -     * @param prepareObject An object to pass to the preparer to setup the 
  -     * PreparedStatement.
  -     * @throws MapperException
  -     * @return The number of rows updated.
  -     */
  -    public int executeUpdate(
  -        String sql,
  -        StatementPreparer preparer,
  -        Object prepareObject)
  -        throws MapperException {
  -
  -        Connection conn = null;
  -        PreparedStatement stmt = null;
  -        boolean autoCommit = false;
  -        int rows = 0;
  -
  -        try {
  -            conn = this.ds.getConnection();
  -            autoCommit = conn.getAutoCommit(); // save old value
  -            conn.setAutoCommit(false); // single transaction.
  -
  -            stmt = conn.prepareStatement(sql);
  -            preparer.prepareStatement(stmt, prepareObject);
  -            rows = stmt.executeUpdate();
  -
  -            conn.commit();
  -
  -        } catch (SQLException e) {
  -            this.rollback(conn);
  -            throw new MapperException(e);
  -        } finally {
  -            this.setAutoCommit(autoCommit, conn);
  -            this.closeStatement(stmt);
  -            this.closeConnection(conn);
  -        }
  -
  -        return rows;
  -    }
  -
  -    /**
  -     * Executes the given INSERT, UPDATE, or DELETE SQL statement.  The 
  -     * statement is executed in it's own transaction that will be committed or rolled 
  -     * back depending on any SQLExceptions thrown.
  -     * @param sql The SQL statement to execute.
  -     * @param params An array of values to fill the sql '?' markers with.
  -     * @throws MapperException
  -     * @return The number of rows updated.
  -     */
  -    public int executeUpdate(String sql, Object[] params) throws MapperException {
  -        return this.executeUpdate(sql, ARRAY_PREPARER, params);
  -    }
  -
  -    /**
  -     * Executes the given INSERT, UPDATE, or DELETE SQL statement.  The 
  -     * statement is executed in it's own transaction that will be committed or rolled 
  -     * back depending on any SQLExceptions thrown.  This is 
  -     * useful for queries with only one replacement parameter and is the equivalent of
  -     * calling executeUpdate(sql, new Object[] { param }).
  -     * @param sql The SQL statement to execute.
  -     * @param param An object to fill one sql '?' marker with.
  -     * @throws MapperException
  -     * @return The number of rows updated.
  -     */
  -    public int executeUpdate(String sql, Object param) throws MapperException {
  -        return this.executeUpdate(sql, ARRAY_PREPARER, new Object[] { param });
  -    }
  -
  -    /**
  -     * Executes the given SELECT SQL query and returns a List of results.
  -     * @param sql The SQL statement to execute.
  -     * @param preparer Initializes the PreparedStatement's IN parameters.
  -     * @param prepareObject An object to pass to the preparer to setup the 
  -     * PreparedStatement.
  -     * @param resultFactory The factory used to create the result objects from the 
  -     * ResultSet.
  -     * @return A list of objects generated by the resultFactory.
  -     * @throws MapperException
  -     */
  -    public List executeQuery(
  -        String sql,
  -        StatementPreparer preparer,
  -        Object prepareObject,
  -        ResultObjectFactory resultFactory)
  -        throws MapperException {
  -
  -        Connection conn = null;
  -        PreparedStatement stmt = null;
  -        ResultSet rs = null;
  -        ArrayList found = new ArrayList();
  -
  -        try {
  -            conn = this.ds.getConnection();
  -            stmt = conn.prepareStatement(sql);
  -
  -            preparer.prepareStatement(stmt, prepareObject);
  -
  -            rs = stmt.executeQuery();
  -            while (rs.next()) {
  -                found.add(resultFactory.createResultObject(rs));
  -            }
  -
  -        } catch (SQLException e) {
  -            throw new MapperException(e);
  -        } finally {
  -            this.closeResultSet(rs);
  -            this.closeStatement(stmt);
  -            this.closeConnection(conn);
  -        }
  -
  -        return found;
  -    }
  -
  -    /**
  -     * Executes the given SELECT SQL query and returns a List of results.
  -     * @param sql The SQL statement to execute.
  -     * @param params An array of values to fill the sql '?' markers with.
  -     * @param resultFactory
  -     * @return A list of objects generated by the resultFactory.
  -     * @throws MapperException
  -     * @see #executeQuery(String, StatementPreparer, Object, ResultObjectFactory)
  -     */
  -    public List executeQuery(
  -        String sql,
  -        Object[] params,
  -        ResultObjectFactory resultFactory)
  -        throws MapperException {
  -
  -        return this.executeQuery(sql, ARRAY_PREPARER, params, resultFactory);
  -    }
  -
  -    /**
  -     * Executes the given SELECT SQL query and returns a List of results.  This is 
  -     * useful for queries with only one replacement parameter and is the equivalent of
  -     * calling executeQuery(sql, new Object[] { param }, factory).
  -     * @param sql The SQL statement to execute.
  -     * @param param An object to fill one sql '?' marker with.
  -     * @param resultFactory
  -     * @return A list of objects generated by the resultFactory.
  -     * @throws MapperException
  -     * @see #executeQuery(String, Object[], ResultObjectFactory)
  -     */
  -    public List executeQuery(
  -        String sql,
  -        Object param,
  -        ResultObjectFactory resultFactory)
  -        throws MapperException {
  -
  -        return this.executeQuery(
  -            sql,
  -            ARRAY_PREPARER,
  -            new Object[] { param },
  -            resultFactory);
  -    }
  -
  -    /**
  -     * Executes a query that doesn't need parameter replacement.
  -     * @param sql The SQL statement to execute.
  -     * @param resultFactory
  -     * @return A list of objects generated by the resultFactory.
  -     * @throws MapperException
  -     * @see #executeQuery(String, StatementPreparer, Object, ResultObjectFactory)
  -     */
  -    public List executeQuery(String sql, ResultObjectFactory resultFactory)
  -        throws MapperException {
  -        return this.executeQuery(sql, NULL_PREPARER, null, resultFactory);
  -    }
  -
  -    /**
  -     * Performs just like the other getField method except that this one gets its own 
  -     * Connection.
  -     * @param query
  -     * @param column
  -     * @return The value of the selected field.
  -     * @throws MapperException
  -     */
  -    public String getField(String query, String column) throws MapperException {
  -        Connection conn = null;
  -        String field = null;
  -
  -        try {
  -            conn = this.ds.getConnection();
  -            field = this.getField(query, column, conn);
  -
  -        } catch (SQLException e) {
  -            throw new MapperException(e);
  -        } finally {
  -            this.closeConnection(conn);
  -        }
  -        return field;
  -    }
  -
  -    /**
  -     * Executes the query and returns the column's value from the first returned row.
  -     * This is helpful when finding the last generated ID in a table but can be used to
  -     * return any column value.
  -     * @param query A valid SQL SELECT query.
  -     * @param column The column whose value should be returned.
  -     * @param conn A Connection to run the query on.
  -     * @throws SQLException if a database access error occurs or the given query
  -     * returned 0 rows.
  -     */
  -    public String getField(String query, String column, Connection conn)
  -        throws SQLException {
  -        PreparedStatement stmt = conn.prepareStatement(query);
  -        String field = null;
  -
  -        try {
  -            ResultSet rs = stmt.executeQuery();
  -            if (!rs.next()) {
  -                throw new SQLException(
  -                    "Query: " + query + " didn't return any records.");
  -            }
  -            field = rs.getString(column);
  -            rs.close();
  -        } finally {
  -            stmt.close();
  -        }
  -        return field;
  -    }
  -
  -    /**
  -     * Rollback any changes made on the given connection.
  -     * @param conn The database Connection to rollback.  A null value is legal.
  -     * @throws MapperException if an SQLException occurred during the rollback.
  -     */
  -    public void rollback(Connection conn) throws MapperException {
  -        try {
  -            if (conn != null) {
  -                conn.rollback();
  -            }
  -        } catch (SQLException e) {
  -            throw new MapperException(e);
  -        }
  -    }
  -
  -    /**
  -     * Convenience method to reset autoCommit on a connection to its previous value
  -     * while wrapping any SQLException in a MapperException.  
  -     * We restore autoCommit after using the connection
  -     * for a create, delete, update, or find because other code might be using
  -     * the same DataSource object to get connections and might depend on the 
  -     * autoCommit flag being set a certain way.  We set it to false and then restore 
  -     * it when we're done with the connection.
  -     * @param autoCommit The autoCommit value to set on the Connection.
  -     * @param conn The Connection to set autoCommit on.
  -     * @throws MapperException if an SQLException occurred setting the autoCommit
  -     * status.
  -     */
  -    public void setAutoCommit(boolean autoCommit, Connection conn)
  -        throws MapperException {
  -        if (conn != null) {
  -            try {
  -                conn.setAutoCommit(autoCommit);
  -            } catch (SQLException e) {
  -                throw new MapperException(e);
  -            }
  -        }
  -    }
  -
  -    /**
  -     * Attempts to close the given connection wrapping any SQLExceptions that occur
  -     * in a MapperException.  Typically, a mapper's methods throw MapperException 
  -     * rather than SQLException so this simplifies Connection cleanup.  Connection 
  -     * objects should <strong>always</strong> be closed in 
  -     * case the DataSource is performing Connection pooling so the Connection can 
  -     * be returned to the pool.
  -     * @param conn The Connection to close.  A null value for this argument is legal.
  -     * @throws MapperException if an SQLException is thrown closing the Connection.
  -     */
  -    public void closeConnection(Connection conn) throws MapperException {
  -        try {
  -            if (conn != null) {
  -                conn.close();
  -            }
  -        } catch (SQLException e) {
  -            throw new MapperException(e);
  -        }
  -    }
  -
  -    /**
  -     * Attempts to close the given Statement wrapping any SQLExceptions that occur
  -     * in a MapperException.  Typically, a mapper's methods throw MapperException 
  -     * rather than SQLException so this simplifies Statement cleanup.  Statement 
  -     * objects (especially PreparedStatements) should <strong>always</strong> be 
  -     * closed in case the DataSource is performing Statement pooling so the 
  -     * Statement can be returned to the pool.
  -     * @param stmt The Statment to close.  A null value for this argument is legal.
  -     * @throws MapperException if an SQLException is thrown closing the Statement.
  -     */
  -    public void closeStatement(Statement stmt) throws MapperException {
  -        try {
  -            if (stmt != null) {
  -                stmt.close();
  -            }
  -        } catch (SQLException e) {
  -            throw new MapperException(e);
  -        }
  -    }
  -
  -    /**
  -     * Attempts to close the given ResultSet wrapping any SQLExceptions that occur
  -     * in a MapperException.
  -     * @param rs The ResultSet to close.  A null value for this argument is legal.
  -     * @throws MapperException if an SQLException is thrown closing the ResultSet.
  -     */
  -    public void closeResultSet(ResultSet rs) throws MapperException {
  -        try {
  -            if (rs != null) {
  -                rs.close();
  -            }
  -        } catch (SQLException e) {
  -            throw new MapperException(e);
  -        }
  -    }
  -
  -    /**
  -     * Converts a boolean to an integer.  False is 0, true is 1.
  -     */
  -    public int toInt(boolean bool) {
  -        return bool ? 1 : 0;
  -    }
  -
  -    /**
  -     * Converts an integer to a boolean.  Zero is false, anything else is true.
  -     */
  -    public boolean toBoolean(int value) {
  -        return (value == 0) ? false : true;
  -    }
  +	/**
  +	 * An implementation of StatementPreparer that does nothing.  Useful when there
  +	 * are no replacement parameters to be set on the PreparedStatement.
  +	 */
  +	private static final StatementPreparer NULL_PREPARER = new StatementPreparer() {
  +		public void prepareStatement(PreparedStatement stmt, Object obj)
  +			throws SQLException {
  +			; // do nothing
  +		}
  +	};
  +
  +	/**
  +	 * An implementation of StatementPreparer that fills a PreparedStatement 
  +	 * with values from an Object[].
  +	 */
  +	private static final StatementPreparer ARRAY_PREPARER =
  +		new StatementPreparer() {
  +		public void prepareStatement(PreparedStatement stmt, Object obj)
  +			throws SQLException {
  +
  +			Object[] args = (Object[]) obj;
  +			for (int i = 0; i < args.length; i++) {
  +				stmt.setObject(i + 1, args[i]);
  +			}
  +		}
  +	};
  +
  +	protected DataSource ds = null;
  +
  +	/**
  +	 * Constructor for JdbcHelper.
  +	 * @param ds The DataSource to get Connections from.
  +	 */
  +	public JdbcHelper(DataSource ds) {
  +		super();
  +		this.ds = ds;
  +	}
  +
  +	/**
  +	 * Executes the given INSERT, UPDATE, or DELETE SQL statement.  The 
  +	 * statement is executed in it's own transaction that will be committed or rolled 
  +	 * back depending on any SQLExceptions thrown.
  +	 * @param sql The SQL statement to execute.
  +	 * @param preparer Initializes the PreparedStatement's IN (ie. '?') parameters.
  +	 * @param prepareObject An object to pass to the preparer to setup the 
  +	 * PreparedStatement.
  +	 * @throws MapperException
  +	 * @return The number of rows updated.
  +	 */
  +	public int executeUpdate(
  +		String sql,
  +		StatementPreparer preparer,
  +		Object prepareObject)
  +		throws MapperException {
  +
  +		Connection conn = null;
  +		PreparedStatement stmt = null;
  +		boolean autoCommit = false;
  +		int rows = 0;
  +
  +		try {
  +			conn = this.getConnection();
  +			autoCommit = conn.getAutoCommit(); // save old value
  +			conn.setAutoCommit(false); // single transaction.
  +
  +			stmt = conn.prepareStatement(sql);
  +			preparer.prepareStatement(stmt, prepareObject);
  +			rows = stmt.executeUpdate();
  +
  +			conn.commit();
  +
  +		} catch (SQLException e) {
  +			this.rollback(conn);
  +			throw new MapperException(e);
  +		} finally {
  +			this.setAutoCommit(autoCommit, conn);
  +			this.closeStatement(stmt);
  +			this.closeConnection(conn);
  +		}
  +
  +		return rows;
  +	}
  +
  +	/**
  +	 * Executes the given INSERT, UPDATE, or DELETE SQL statement.  The 
  +	 * statement is executed in it's own transaction that will be committed or rolled 
  +	 * back depending on any SQLExceptions thrown.
  +	 * @param sql The SQL statement to execute.
  +	 * @param params An array of values to fill the sql '?' markers with.
  +	 * @throws MapperException
  +	 * @return The number of rows updated.
  +	 */
  +	public int executeUpdate(String sql, Object[] params) throws MapperException {
  +		return this.executeUpdate(sql, ARRAY_PREPARER, params);
  +	}
  +
  +	/**
  +	 * Executes the given INSERT, UPDATE, or DELETE SQL statement.  The 
  +	 * statement is executed in it's own transaction that will be committed or rolled 
  +	 * back depending on any SQLExceptions thrown.  This is 
  +	 * useful for queries with only one replacement parameter and is the equivalent of
  +	 * calling executeUpdate(sql, new Object[] { param }).
  +	 * @param sql The SQL statement to execute.
  +	 * @param param An object to fill one sql '?' marker with.
  +	 * @throws MapperException
  +	 * @return The number of rows updated.
  +	 */
  +	public int executeUpdate(String sql, Object param) throws MapperException {
  +		return this.executeUpdate(sql, ARRAY_PREPARER, new Object[] { param });
  +	}
  +
  +	/**
  +	 * Executes the given SELECT SQL query and returns a List of results.
  +	 * @param sql The SQL statement to execute.
  +	 * @param preparer Initializes the PreparedStatement's IN parameters.
  +	 * @param prepareObject An object to pass to the preparer to setup the 
  +	 * PreparedStatement.
  +	 * @param resultFactory The factory used to create the result objects from the 
  +	 * ResultSet.
  +	 * @return A list of objects generated by the resultFactory.
  +	 * @throws MapperException
  +	 */
  +	public List executeQuery(
  +		String sql,
  +		StatementPreparer preparer,
  +		Object prepareObject,
  +		ResultObjectFactory resultFactory)
  +		throws MapperException {
  +
  +		Connection conn = null;
  +		PreparedStatement stmt = null;
  +		ResultSet rs = null;
  +		ArrayList found = new ArrayList();
  +
  +		try {
  +			conn = this.getConnection();
  +			stmt = conn.prepareStatement(sql);
  +
  +			preparer.prepareStatement(stmt, prepareObject);
  +
  +			rs = stmt.executeQuery();
  +			while (rs.next()) {
  +				found.add(resultFactory.createResultObject(rs));
  +			}
  +
  +		} catch (SQLException e) {
  +			throw new MapperException(e);
  +		} finally {
  +			this.closeResultSet(rs);
  +			this.closeStatement(stmt);
  +			this.closeConnection(conn);
  +		}
  +
  +		return found;
  +	}
  +
  +	/**
  +	 * Executes the given SELECT SQL query and returns a List of results.
  +	 * @param sql The SQL statement to execute.
  +	 * @param params An array of values to fill the sql '?' markers with.
  +	 * @param resultFactory
  +	 * @return A list of objects generated by the resultFactory.
  +	 * @throws MapperException
  +	 * @see #executeQuery(String, StatementPreparer, Object, ResultObjectFactory)
  +	 */
  +	public List executeQuery(
  +		String sql,
  +		Object[] params,
  +		ResultObjectFactory resultFactory)
  +		throws MapperException {
  +
  +		return this.executeQuery(sql, ARRAY_PREPARER, params, resultFactory);
  +	}
  +
  +	/**
  +	 * Executes the given SELECT SQL query and returns a List of results.  This is 
  +	 * useful for queries with only one replacement parameter and is the equivalent of
  +	 * calling executeQuery(sql, new Object[] { param }, factory).
  +	 * @param sql The SQL statement to execute.
  +	 * @param param An object to fill one sql '?' marker with.
  +	 * @param resultFactory
  +	 * @return A list of objects generated by the resultFactory.
  +	 * @throws MapperException
  +	 * @see #executeQuery(String, Object[], ResultObjectFactory)
  +	 */
  +	public List executeQuery(
  +		String sql,
  +		Object param,
  +		ResultObjectFactory resultFactory)
  +		throws MapperException {
  +
  +		return this.executeQuery(
  +			sql,
  +			ARRAY_PREPARER,
  +			new Object[] { param },
  +			resultFactory);
  +	}
  +
  +	/**
  +	 * Executes a query that doesn't need parameter replacement.
  +	 * @param sql The SQL statement to execute.
  +	 * @param resultFactory
  +	 * @return A list of objects generated by the resultFactory.
  +	 * @throws MapperException
  +	 * @see #executeQuery(String, StatementPreparer, Object, ResultObjectFactory)
  +	 */
  +	public List executeQuery(String sql, ResultObjectFactory resultFactory)
  +		throws MapperException {
  +			
  +		return this.executeQuery(sql, NULL_PREPARER, null, resultFactory);
  +	}
  +
  +	/**
  +	 * Performs just like the other getField method except that this one gets its own 
  +	 * Connection.
  +	 * @param query
  +	 * @param column
  +	 * @return The value of the selected field.
  +	 * @throws MapperException
  +	 */
  +	public String getField(String query, String column) throws MapperException {
  +		Connection conn = null;
  +		String field = null;
  +
  +		try {
  +			conn = this.getConnection();
  +			field = this.getField(query, column, conn);
  +
  +		} catch (SQLException e) {
  +			throw new MapperException(e);
  +		} finally {
  +			this.closeConnection(conn);
  +		}
  +		
  +		return field;
  +	}
  +
  +	/**
  +	 * Executes the query and returns the column's value from the first returned row.
  +	 * This is helpful when finding the last generated ID in a table but can be used to
  +	 * return any column value.
  +	 * @param query A valid SQL SELECT query.
  +	 * @param column The column whose value should be returned.
  +	 * @param conn A Connection to run the query on.
  +	 * @throws SQLException if a database access error occurs or the given query
  +	 * returned 0 rows.
  +	 */
  +	public String getField(String query, String column, Connection conn)
  +		throws SQLException {
  +
  +		PreparedStatement stmt = conn.prepareStatement(query);
  +		ResultSet rs = null;
  +		String field = null;
  +
  +		try {
  +			rs = stmt.executeQuery();
  +			if (!rs.next()) {
  +				throw new SQLException(
  +					"Query: " + query + " didn't return any records.");
  +			}
  +			field = rs.getString(column);
  +
  +		} finally {
  +			if (rs != null) {
  +				rs.close();
  +			}
  +			
  +			stmt.close();
  +		}
  +		
  +		return field;
  +	}
  +
  +	/**
  +	 * Rollback any changes made on the given connection.
  +	 * @param conn The database Connection to rollback.  A null value is legal.
  +	 * @throws MapperException if an SQLException occurred during the rollback.
  +	 */
  +	public void rollback(Connection conn) throws MapperException {
  +		try {
  +			if (conn != null) {
  +				conn.rollback();
  +			}
  +		} catch (SQLException e) {
  +			throw new MapperException(e);
  +		}
  +	}
  +
  +	/**
  +	 * Convenience method to reset autoCommit on a connection to its previous value
  +	 * while wrapping any SQLException in a MapperException.  
  +	 * We restore autoCommit after using the connection
  +	 * for a create, delete, update, or find because other code might be using
  +	 * the same DataSource object to get connections and might depend on the 
  +	 * autoCommit flag being set a certain way.  We set it to false and then restore 
  +	 * it when we're done with the connection.
  +	 * @param autoCommit The autoCommit value to set on the Connection.
  +	 * @param conn The Connection to set autoCommit on.
  +	 * @throws MapperException if an SQLException occurred setting the autoCommit
  +	 * status.
  +	 */
  +	public void setAutoCommit(boolean autoCommit, Connection conn)
  +		throws MapperException {
  +		if (conn != null) {
  +			try {
  +				conn.setAutoCommit(autoCommit);
  +			} catch (SQLException e) {
  +				throw new MapperException(e);
  +			}
  +		}
  +	}
  +
  +	/**
  +	 * Attempts to close the given connection wrapping any SQLExceptions that occur
  +	 * in a MapperException.  Typically, a mapper's methods throw MapperException 
  +	 * rather than SQLException so this simplifies Connection cleanup.  Connection 
  +	 * objects should <strong>always</strong> be closed in 
  +	 * case the DataSource is performing Connection pooling so the Connection can 
  +	 * be returned to the pool.
  +	 * @param conn The Connection to close.  A null value for this argument is legal.
  +	 * @throws MapperException if an SQLException is thrown closing the Connection.
  +	 */
  +	public void closeConnection(Connection conn) throws MapperException {
  +		try {
  +			if (conn != null) {
  +				conn.close();
  +			}
  +		} catch (SQLException e) {
  +			throw new MapperException(e);
  +		}
  +	}
  +
  +	/**
  +	 * Attempts to close the given Statement wrapping any SQLExceptions that occur
  +	 * in a MapperException.  Typically, a mapper's methods throw MapperException 
  +	 * rather than SQLException so this simplifies Statement cleanup.  Statement 
  +	 * objects (especially PreparedStatements) should <strong>always</strong> be 
  +	 * closed in case the DataSource is performing Statement pooling so the 
  +	 * Statement can be returned to the pool.
  +	 * @param stmt The Statment to close.  A null value for this argument is legal.
  +	 * @throws MapperException if an SQLException is thrown closing the Statement.
  +	 */
  +	public void closeStatement(Statement stmt) throws MapperException {
  +		try {
  +			if (stmt != null) {
  +				stmt.close();
  +			}
  +		} catch (SQLException e) {
  +			throw new MapperException(e);
  +		}
  +	}
  +
  +	/**
  +	 * Attempts to close the given ResultSet wrapping any SQLExceptions that occur
  +	 * in a MapperException.
  +	 * @param rs The ResultSet to close.  A null value for this argument is legal.
  +	 * @throws MapperException if an SQLException is thrown closing the ResultSet.
  +	 */
  +	public void closeResultSet(ResultSet rs) throws MapperException {
  +		try {
  +			if (rs != null) {
  +				rs.close();
  +			}
  +		} catch (SQLException e) {
  +			throw new MapperException(e);
  +		}
  +	}
  +
  +	/**
  +	 * Converts a boolean to an integer.  False is 0, true is 1.
  +	 */
  +	public int toInt(boolean bool) {
  +		return bool ? 1 : 0;
  +	}
  +
  +	/**
  +	 * Converts an integer to a boolean.  Zero is false, anything else is true.
  +	 */
  +	public boolean toBoolean(int value) {
  +		return (value == 0) ? false : true;
  +	}
  +
  +	/**
  +	 * JdbcHelper uses this method internally whenever it needs a database 
  +	 * Connection.  This implementation retrieves a Connection from the 
  +	 * DataSource.  Subclasses can override this method to change how 
  +	 * Connections are retrieved, perhaps supplying a username and password 
  +	 * other than what was configured in the DataSource. 
  +	 * @return A database Connection.
  +	 * @throws SQLException
  +	 */
  +	protected Connection getConnection() throws SQLException {
  +		return this.ds.getConnection();
  +	}
   
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org