dgraham 2003/07/28 21:54:58
Modified: mapper/src/share/org/apache/commons/mapper/jdbc
JdbcHelper.java
Log:
Added default constructor, get/setDataSource(), and createMapperException().
The createMapperException() method can be used to generate more
specific exceptions based on the SQLState and ErrorCode of an
SQLException.
Revision Changes Path
1.8 +50 -7
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.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- JdbcHelper.java 23 Jul 2003 00:12:28 -0000 1.7
+++ JdbcHelper.java 29 Jul 2003 04:54:58 -0000 1.8
@@ -74,7 +74,7 @@
/**
* JdbcHelper factors out mundane and error prone JDBC coding into easy to use
- * helper methods.
+ * helper methods. This class is thread safe.
*
* @author David Graham
*/
@@ -113,6 +113,16 @@
protected DataSource ds = null;
/**
+ * Default constructor for JdbcHelper. This is provided mainly to
+ * allow JavaBean type creation from a factory. Clients must call
+ * <code>setDataSource()</code> before using an instance of this class
+ * created with this constructor.
+ */
+ public JdbcHelper() {
+ super();
+ }
+
+ /**
* Constructor for JdbcHelper.
* @param ds The DataSource to get Connections from.
*/
@@ -157,7 +167,7 @@
} catch (SQLException e) {
this.rollback(conn);
- throw new MapperException(e);
+ throw this.createMapperException(e);
} finally {
this.setAutoCommit(autoCommit, conn);
this.closeStatement(stmt);
@@ -194,7 +204,7 @@
public int executeUpdate(String sql, Object param) throws MapperException {
return this.executeUpdate(sql, ARRAY_PREPARER, new Object[] { param });
}
-
+
/**
* Executes the given INSERT, UPDATE, or DELETE SQL statement. The
* statement is executed in it's own transaction that will be committed or
@@ -242,7 +252,7 @@
rows = processor.process(rs);
} catch (SQLException e) {
- throw new MapperException(e);
+ throw this.createMapperException(e);
} finally {
this.closeResultSet(rs);
this.closeStatement(stmt);
@@ -253,6 +263,22 @@
}
/**
+ * When executeQuery() and executeUpdate() catch an SQLException they call
+ * this factory method to generate a MapperException to throw to the
+ * caller. This can be useful for generating a specific MapperException
+ * subclass that is more descriptive of the error. For example, this method
+ * could examine the SQLState and ErrorCode of the SQLException to determine
+ * that a unique constraint was violated and throw a
+ * UniqueFieldAlreadyExistsException. This implementation always returns
+ * a MapperException wrapping the given SQLException.
+ * @param e The SQLException that caused the query to fail.
+ * @return A MapperException for the given SQLException.
+ */
+ protected MapperException createMapperException(SQLException e) {
+ return new MapperException(e);
+ }
+
+ /**
* 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.
@@ -493,6 +519,23 @@
*/
protected Connection getConnection() throws SQLException {
return this.ds.getConnection();
+ }
+
+ /**
+ * Returns the <code>DataSource</code> this helper is using.
+ */
+ public DataSource getDataSource() {
+ return this.ds;
+ }
+
+ /**
+ * Sets the <code>DataSource</code> this helper will use to get
+ * database connections from. This should be called after creating a
+ * helper with the default constructor.
+ * @param dataSource The DataSource to use.
+ */
+ public void setDataSource(DataSource dataSource) {
+ this.ds = dataSource;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]