public List<Table> getViewList() {
		Connection con = null;
		try {
			con = dbSource.getConnection();
			List<Table> viewList = new ArrayList<Table>();
			ResultSet viewRs = null;
			try {
				DatabaseMetaData dmd = con.getMetaData();
				DbFeature dbFeature = DbFeature.getInstance(dmd);
				String schema = dbSource.getSchema();
				if (schema == null) {
					schema = dbFeature.defaultSchema();
				}
				String[] types = { "VIEW" };
				viewRs = dmd.getTables(null, schema, "%", types);
				while (viewRs.next()) {
					String viewName = viewRs.getString("TABLE_NAME");
					List<Column> columnList = new ArrayList<Column>();
					ResultSet columnRs = null;
					try {
						columnRs = dmd.getColumns(null, schema, viewName, "%");
						while (columnRs.next()) {
							Column column = getColumn(columnRs, null);
							columnList.add(column);
						}
					} finally {
						DbUtil.closeResultSet(columnRs);
					}
					Table view = new Table(viewName);
					view.setTable(false);
					view.addColumnList(columnList);
					viewList.add(view);
				}
			} finally {
				DbUtil.closeResultSet(viewRs);
			}
			for (Table view : viewList) {
				view.setName(view.getName().toUpperCase());
				for (Column column : view.getColumnList()) {
					column.setName(column.getName().toUpperCase());
				}
			}
			return viewList;
		} catch (SQLException e) {
			throw new DbKingException(e);
		} finally {
			if (!(dbSource instanceof ConnectionDbSource)) {
				DbUtil.closeConnection(con);
			}
		}
	}