@Override
	public SQLExceptionConverter buildSQLExceptionConverter() {
		return new SQLExceptionConverter() {
			private static final long serialVersionUID = 1L;

			public JDBCException convert(SQLException sqlException,
					String message, String sql) {
				final int errorCode = JdbcExceptionHelper.extractErrorCode(sqlException);
				if (errorCode == SQLITE_CONSTRAINT) {
					final String constraintName = EXTRACTER
							.extractConstraintName(sqlException);
					return new ConstraintViolationException(message,
							sqlException, sql, constraintName);
				} else if (errorCode == SQLITE_TOOBIG
						|| errorCode == SQLITE_MISMATCH) {
					return new DataException(message, sqlException, sql);
				} else if (errorCode == SQLITE_BUSY
						|| errorCode == SQLITE_LOCKED) {
					return new LockAcquisitionException(message, sqlException,
							sql);
				} else if ((errorCode >= SQLITE_IOERR && errorCode <= SQLITE_PROTOCOL)
						|| errorCode == SQLITE_NOTADB) {
					return new JDBCConnectionException(message, sqlException,
							sql);
				}
				return new GenericJDBCException(message, sqlException, sql);
			}
		};
	}