当前位置: 首页 > 知识库问答 >
问题:

Regex用于分析数据库列,如JDBC ResultSet

岳华灿
2023-03-14

我正在使用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之间的字符串,使用列分隔符创建组,并从组中构建arrayOf列。但是JDBC有特定的方法来处理别名。例如,对于第二列,这个简单的解析器将返回整个“bar AS barAlias”,我相信resultSet.get**需要“barAlias”。它会告诉我“列名bar As barAlias无效。”

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

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

共有3个答案

谷梁嘉运
2023-03-14

因此,在对分隔符(逗号)进行分割以获得SELECT和FROM之间的列名之后,检查每个列名是否包含字符串“AS”(您可能需要考虑大写和小写),如果存在,则在该处进行分割,并使用最右边的值。

那鹏
2023-03-14

要获取与您的ResultSet关联的列名,您应该查阅其ResultSetMetaData。这将比解析查询文本更容易、更可靠。

柴兴修
2023-03-14

获取结果集列的最佳方法是让 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));
}
 类似资料:
  • 目前的C++标准库是不支持正则表达式的。这是令人遗憾的,有那么多对正则表达式的需要,有时用户为 了编写需要支持正则表达式的程序而不得不放弃使用C++。Boost.Regex填补了标准在这方面的空白,并且它已经被提议加入到下一个版本的C++标 准中。Boost.Regex已经被即将发布的Library Technical Report所接受。

  • 当你检查一个商业活动并且发现了把它转换为软件应用程序的需求时,数据分析是软件开发早期的一个过程。这是一个官方的定义,当你,一个程序员,应该集中注意力在写别人设计的东西的代码时,这可能会让你相信数据分析是一种更应该归入系统分析的行为。如果我们严格遵循软件工程范式,这可能是正确的。有经验的程序员会成为设计者,最尖锐的设计者变成商业分析师,因此被冠名去思考所有数据需要,并且给你充分定义的任务去执行。这不

  • 1.明确需求 需求来源:文档,原型图 2.确定功能 根据需求确定要完善的功能 3.根据需求设计数据库 需求如下: 1.确定要创建的数据库表的数量 根据需求图可明显的表明需要角色表与用户表 角色与用户的关系: 角色可对应多名用户,同时用户也可对应多种角色 由于角色与用户为多对多的关系,所以需要建立一个中间表来实现多对多的关系 因此需要角色表、用户表以及用户角色表 这三张表 2.确定要创建的数据表中

  • 问题内容: 我正在进行的一个项目在不久的将来可能会跨越几百万行,所以我正在研究我使用的数据库,因为这肯定会证明是一个问题。据我所读,一旦涉及到表的2,000,000行问题,SQL的所有形式都会出现问题。对于这些大型项目,有没有推荐好的数据库? 我正在谈论的是一个网站,归档旧条目并不理想,但是如果证明这是我无法克服的问题,则可以这样做。 谢谢。 问题答案: 我已经在MS SQL Server中使用了

  • 有时候,对于我们的决定只要有一点点的数据支持就够了。一点点的变化,可能就决定了我们产品的好坏。我们可能会因此而作出一些些改变,这些改变可能会让我们打败巨头。 这一点和 Growth 的构建过程也很相像,在最开始的时候我只是想制定一个成长路线。而后,我发现这好像是一个不错的 idea,我就开始去构建这个 idea。于是它变成了 Growth,这时候我需要依靠什么去分析用户喜欢的功能呢?我没有那么多的

  • 主要内容:1.数据仓库概述,2.数据仓库建模概述,3.维度建模理论之事实表,4.维度建模理论之维度表,5.数据仓库设计1.数据仓库概述 1.1 数据仓库概念 数据仓库是一个为数据分析而设计的企业级数据管理系统。数据仓库可集中、整合多个信息源的大量数据,借助数据仓库的分析能力,企业可从数据中获得宝贵的信息进而改进决策。同时,随着时间的推移,数据仓库中积累的大量历史数据对于数据科学家和业务分析师也是十分宝贵的。 1.2 数据仓库核心架构 2.数据仓库建模概述 2.1 数据仓库建模的意义 数据模型就是