public TableMetaData getTableMetaData(String tableName) { TableMetaData result = new TableMetaData(); ResultSet resultSet = null; try { try { result.setTableName(tableName); DatabaseMetaData metaData = getDbSqlSession().getSqlSession().getConnection().getMetaData(); if (DbSqlSessionFactory.POSTGRES.equals( getDbSqlSession().getDbSqlSessionFactory().getDatabaseType())) { tableName = tableName.toLowerCase(); } resultSet = metaData.getColumns(null, null, tableName, null); while (resultSet.next()) { String name = resultSet.getString("COLUMN_NAME").toUpperCase(); String type = resultSet.getString("TYPE_NAME").toUpperCase(); result.addColumnMetaData(name, type); } } catch (SQLException se) { throw se; } finally { if (resultSet != null) { resultSet.close(); } } } catch (Exception e) { throw LOG.retrieveMetadataException(e); } if (result.getColumnNames().size() == 0) { // According to API, when a table doesn't exist, null should be returned result = null; } return result; }