FileDocCategorySizeDatePackage
JDBCUtil.javaAPI DocApache James 2.3.17985Fri Jan 12 12:56:34 GMT 2007org.apache.james.util

JDBCUtil

public abstract class JDBCUtil extends Object

Helper class for managing common JDBC tasks.

This class is abstract to allow implementations to take advantage of different logging capabilities/interfaces in different parts of the code.

version
CVS $Revision: 494012 $ $Date: 2007-01-08 11:23:58 +0100 (Mo, 08 Jan 2007) $

Fields Summary
Constructors Summary
Methods Summary
public voidcloseJDBCConnection(java.sql.Connection conn)
Closes database connection and logs if an error is encountered

param
conn the connection to be closed

        try {
            if (conn != null) {
                conn.close();
            }
        } catch (SQLException sqle) {
            // Log exception and continue
            subclassLogWrapper("Unexpected exception while closing database connection.");
        }
    
public voidcloseJDBCResultSet(java.sql.ResultSet aResultSet)
Closes database result set and logs if an error is encountered

param
aResultSet the result set to be closed

        try {
            if (aResultSet != null) {
                aResultSet.close();
            }
        } catch (SQLException sqle) {
            // Log exception and continue
            subclassLogWrapper("Unexpected exception while closing database result set.");
        }
    
public voidcloseJDBCStatement(java.sql.Statement stmt)
Closes database statement and logs if an error is encountered

param
stmt the statement to be closed

        try {
            if (stmt != null) {
                stmt.close();
            }
        } catch (SQLException sqle) {
            // Log exception and continue
            subclassLogWrapper("Unexpected exception while closing database statement.");
        }
    
public booleancolumnExists(java.sql.DatabaseMetaData dbMetaData, java.lang.String tableName, java.lang.String columnName)
Checks database metadata to see if a column exists in a table Try UPPER, lower, and MixedCase, both on the table name and the column name, to see if the column is there.

param
dbMetaData the database metadata to be used to look up this column
param
tableName the table name
param
columnName the column name
throws
SQLException if an exception is encountered while accessing the database

        return ( columnExistsCaseSensitive(dbMetaData, tableName, columnName) ||
                 columnExistsCaseSensitive(dbMetaData, tableName, columnName.toUpperCase(Locale.US)) ||
                 columnExistsCaseSensitive(dbMetaData, tableName, columnName.toLowerCase(Locale.US)) ||
                 columnExistsCaseSensitive(dbMetaData, tableName.toUpperCase(Locale.US), columnName) ||
                 columnExistsCaseSensitive(dbMetaData, tableName.toUpperCase(Locale.US), columnName.toUpperCase(Locale.US)) ||
                 columnExistsCaseSensitive(dbMetaData, tableName.toUpperCase(Locale.US), columnName.toLowerCase(Locale.US)) ||
                 columnExistsCaseSensitive(dbMetaData, tableName.toLowerCase(Locale.US), columnName) ||
                 columnExistsCaseSensitive(dbMetaData, tableName.toLowerCase(Locale.US), columnName.toUpperCase(Locale.US)) ||
                 columnExistsCaseSensitive(dbMetaData, tableName.toLowerCase(Locale.US), columnName.toLowerCase(Locale.US)) );
    
public booleancolumnExistsCaseSensitive(java.sql.DatabaseMetaData dbMetaData, java.lang.String tableName, java.lang.String columnName)
Checks database metadata to see if a column exists in a table. This method is sensitive to the case of both the provided table name and column name.

param
dbMetaData the database metadata to be used to look up this column
param
tableName the case sensitive table name
param
columnName the case sensitive column name
throws
SQLException if an exception is encountered while accessing the database

        ResultSet rsTables = dbMetaData.getColumns(null, null, tableName, columnName);
        try {
            boolean found = rsTables.next();
            return found;
        } finally {
            closeJDBCResultSet(rsTables);
        }
    
protected abstract voiddelegatedLog(java.lang.String errorString)
An abstract method which child classes override to handle logging of errors in their particular environments.

param
errorString the error message generated

private voidsubclassLogWrapper(java.lang.String logString)
Wraps the delegated call to the subclass logging method with a Throwable wrapper. All throwables generated by the subclass logging method are caught and ignored.

param
logString the raw string to be passed to the logging method implemented by the subclass

        try {
            delegatedLog(logString);
        }
        catch(Throwable t) {
            // Throwables generated by the logging system are ignored
        }
    
public booleantableExists(java.sql.DatabaseMetaData dbMetaData, java.lang.String tableName)
Checks database metadata to see if a table exists. Try UPPER, lower, and MixedCase, to see if the table is there.

param
dbMetaData the database metadata to be used to look up this table
param
tableName the table name
throws
SQLException if an exception is encountered while accessing the database

        return ( tableExistsCaseSensitive(dbMetaData, tableName) ||
                 tableExistsCaseSensitive(dbMetaData, tableName.toUpperCase(Locale.US)) ||
                 tableExistsCaseSensitive(dbMetaData, tableName.toLowerCase(Locale.US)) );
    
public booleantableExistsCaseSensitive(java.sql.DatabaseMetaData dbMetaData, java.lang.String tableName)
Checks database metadata to see if a table exists. This method is sensitive to the case of the provided table name.

param
dbMetaData the database metadata to be used to look up this table
param
tableName the case sensitive table name
throws
SQLException if an exception is encountered while accessing the database

        ResultSet rsTables = dbMetaData.getTables(null, null, tableName, null);
        try {
            boolean found = rsTables.next();
            return found;
        } finally {
            closeJDBCResultSet(rsTables);
        }