gpt4 book ai didi

java - 解析数据库列的正则表达式,如 JDBC ResultSet

转载 作者:行者123 更新时间:2023-11-29 03:17:41 26 4
gpt4 key购买 nike

我正在使用 JDBC 从查询结果中获取列。

例如:

String query = "SELECT foo, bar AS barAlias FROM table";
PreparedStatement preparedStatement = connection.prepareStatement(query);
ResultSet resultSet = preparedStatement.executeQuery();

//Show my "foo" column results
while (resultSet.next()) {
log.debug(resultSet.getString("foo"));
}

我想在运行它们之前解析我的查询。本质上,我想为列标签创建一个数组,该数组将匹配 resultSet.get** 方法预期的值。出于说明目的,我想以此替换上面的循环并获得相同的结果:

//Show my "foo" column results
while (resultSet.next()) {
log.debug(resultSet.getString(arrayOfColumns.get(0)));
}

这看起来很简单。我可以使用一个简单的正则表达式来解析我的语句,该正则表达式采用 SELECT 和 FROM 之间的字符串,使用列定界符创建组,并从这些组构建 arrayOfColumns。但是 JDBC 有特定的方法来处理例如别名。对于第二列,这个天真的解析器将返回整个“bar AS barAlias”,我相信 resultSet.get** 需要“barAlias”。它会告诉我“列名 bar As barAlias 无效。”

本质上,我想了解 JBDC 列标签解析行为以便复制它。

注意,我知道我可以通过索引从 resultSet 对象中获取列。这不是这里的目标。另外,我不想使用任何与 JDBC 相关的方法(我知道 preparedStatement 元数据可用)。将此视为没有 JDBC 库且必须使用正则表达式的理论问题。

最佳答案

获取结果集的列的最好方法是让 JDBC 为您完成。您不需要 ResultSet 对象 - ResultSetMetaData就足够了。

PreparedStatement preparedStatement = connection.prepareStatement(query);
ResultSetMetaData metaData = preparedStatement.getMetaData();

for (int i = 1 ; i <= metaData.getColumnCount() ; i++) {
listOfColumns.add(metaData.getColumnLabel(i));
}

关于java - 解析数据库列的正则表达式,如 JDBC ResultSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25570907/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com