首页 > 解决方案 > java - 如何通过java mysql驱动程序从sql查询字符串中获取固定值?

问题描述

我想通过 mysql-connector-java lib 解析这个 sql

select 1 as a, 'b' as b, now() as c from dual

我已经通过 java.sql.ResultSetMetaData 尝试过,但是获取列名'a','b','c'而不是1,'b', now().

Method getField;
        boolean accessible;
        try {
            getField = ResultSetMetaData.class.getDeclaredMethod("getField", int.class);
            accessible = getField.isAccessible();
        } catch (NoSuchMethodException e) {
            throw new ServiceException(e.getMessage(), e);
        }
        if (!accessible) {
            getField.setAccessible(true);
        }
        try (Connection connection = this.dataSource.getConnection();
             PreparedStatement statement = connection.prepareStatement(sql)) {
            java.sql.ResultSetMetaData metaData = statement.getMetaData();
            IntStream.rangeClosed(1, metaData.getColumnCount())
                .mapToObj(i -> {
                    try {
                        Field field = (Field) getField.invoke(metaData, i);
                        // this is not i want
                        field.getName();
                        // this is not i want
                        metaData.getColumnName(i);
                        // this is empty
                        metaData.getColumnLabel(i);

                        // my own entity
                        return field;
                    } catch (SQLException | IllegalAccessException | InvocationTargetException e) {
                        log.warn(e.getMessage(), e);
                        return null;
                    }
                })
                .filter(Objects::nonNull)
                .collect(Collectors.toList());
        } catch (SQLException e) {
            throw e;
        } finally {
            if (!accessible) {
                getField.setAccessible(false);
            }
        }

有没有办法通过驱动程序获取固定值?或其他方法,请帮助接近故障的人。

标签: javamysqldriver

解决方案


推荐阅读