java - 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);
}
}
有没有办法通过驱动程序获取固定值?或其他方法,请帮助接近故障的人。
解决方案
推荐阅读
- python-3.x - Python,打印在 2 个列表中找到的彩色重复项
- database - 将邮件合并结果与数据库连接后不显示
- excel - 如何让我的 VBA 项目引用 OneDrive 上的 Excel 工作簿以使用本地驱动器路径而不是 OneDrve URL 路径?
- sorting - 为什么在 Teradata 和 Snowflake 中执行的相同查询的排序顺序不同?
- java - 如何在Android中恢复默认导航栏颜色?
- ios - 在条带支付网关上获取有关身份验证的空白页
- c# - c# winforms .net core 5.0 - 如何捕获菜单项点击事件
- ssrs-2017 - SSRS - 在收藏夹中创建一个文件夹
- sql - SQL从同一个id获取多个值
- typescript - 开玩笑测试模拟 200