Improve DaoException
--------------------
Key: IBATIS-58
URL: http://issues.apache.org/jira/browse/IBATIS-58
Project: iBatis for Java
Type: Improvement
Versions: 2.0.9
Reporter: Siveton Vincent
Actually, in resume, SqlMapDaoTemplate throws a DaoException (a
NestedRuntimeException subclass) if any SQLException is caught by insert,
update or delete methods.
The GeneralStatement class catch SQLException e and wrap it in a
new NestedSQLException(errorContext.toString(), e.getSQLState(),
e.getErrorCode(), e);
I think it is the DAO layer role to catch the sqlexception and give more
information about this exception, like a schema integrity exception or a DB
server exception.
In the SqlMapDaoTemplate class, we can have for example:
public Object insert / update / delete(String id, Object parameterObject)
throws DaoException, DatabaseSchemaIntegrityException, DatabaseServerException;
public Object execute* (String id, Object parameterObject)
throws DaoException, DatabaseServerException;
This idea is very easy to implement and improve (for me) the development: it s
only parsing the sqlstate or the sqlerrorcode.
What does the iBatis team think about that?
Check these documentation:
http://www.postgresql.org/docs/current/static/errcodes-appendix.html
http://dev.mysql.com/doc/mysql/en/Error-handling.html
For example, we can have this exception hierarchy:
DatabaseSchemaIntegrityViolationException hierarchy can be
|--ForeignKeyViolationException
"23503".equals(se.getSQLState()) if postgresql
1216 == se.getErrorCode() if mysql
|--NotNullViolationException
"23502".equals(se.getSQLState()) if postgresql
1048 == se.getErrorCode() if mysql
|--UniqueKeyViolationException
"23505".equals(se.getSQLState()) if postgresql
1062 == se.getErrorCode() if mysql
|--UniqueTableViolationException
"42P07".equals(se.getSQLState()) if postgresql
1050 == se.getErrorCode() if mysql
DatabaseServerException hierarchy is
|--LostConnectionException
"08003".equals(se.getSQLState()) if postgresql
"08003".equals(se.getSQLState()) if mysql
|--CommunicationFailureException
"08S01".equals(se.getSQLState()) if postgresql
1043 OR 1053 OR 1081 OR 1154 == se.getErrorCode() if mysql
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
http://www.atlassian.com/software/jira