public Table getTable(String tableName) {
		Connection con = null;
		try {
			con = dbSource.getConnection();
			DatabaseMetaData dmd = con.getMetaData();
			DbFeature dbFeature = DbFeature.getInstance(dmd);
			String schema = dbSource.getSchema();
			if (schema == null) {
				schema = dbFeature.defaultSchema();
			}
			tableName = dbFeature.defaultCaps(tableName);
			Set<String> pkSet = new HashSet<String>();
			ResultSet pkRs = null;
			try {
				pkRs = dmd.getPrimaryKeys(null, schema, tableName);
				while (pkRs.next()) {
					String columnName = pkRs.getString("COLUMN_NAME");
					pkSet.add(columnName);
				}
			} finally {
				DbUtil.closeResultSet(pkRs);
			}
			List<Column> columnList = new ArrayList<Column>();
			ResultSet columnRs = null;
			try {
				columnRs = dmd.getColumns(null, schema, tableName, "%");
				while (columnRs.next()) {
					Column column = getColumn(columnRs, pkSet);
					columnList.add(column);
				}
			} finally {
				DbUtil.closeResultSet(columnRs);
			}
			if (columnList.size() > 0) {
				Table table = new Table(tableName.toUpperCase());
				table.addColumnList(columnList);
				for (Column column : table.getColumnList()) {
					column.setName(column.getName().toUpperCase());
				}
				return table;
			} else {
				return null;
			}
		} catch (SQLException e) {
			return null;
		} finally {
			if (!(dbSource instanceof ConnectionDbSource)) {
				DbUtil.closeConnection(con);
			}
		}
	}