首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java regex从SQL查询获取表别名

问Java regex从SQL查询获取表别名
EN

Stack Overflow用户
提问于 2020-05-08 08:02:38
回答 1查看 276关注 0票数 0

我正在使用SQL Server 2017数据库和Spring启动项目。我不能用JPA。使用spring。我有一个需求,可以动态地向查询添加条件。

例如,在我的属性文件中已经有一个查询-

代码语言:javascript
复制
SELECT o.OrderID, c.CustomerName
FROM ECO.Orders o
INNER JOIN ECO.Customers c ON o.CustomerID = c.CustomerID 

(ECO是我的架构名称,必须包含在查询中)

现在,在java中,我需要动态地附加条件-例如。"where CustomerID = 1“

问题是它会抛出

jdbc.SQLServerException:不明确的列名CustomerID

因此,我必须在这个列中添加一个别名。

"where o.CustomerID = 1“将非常好地工作。

现在,我需要找到从查询中获取别名的方法。

我试过以下几点:

代码语言:javascript
复制
 String test = query.substring(query.indexOf("FROM ECO."));
 System.out.println(test);

其结果如下:

代码语言:javascript
复制
FROM ECO.Orders o

我只需要从这个得到表别名。我想这可以用regex来完成。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-08 08:27:05

可以使用regex提取别名,如下面的示例所示:

代码语言:javascript
复制
  public static void main(String[] args) {
    final String queryString = "SELECT o.OrderID, c.CustomerName \n"
        + "FROM ECO.Orders o \n"
        + "INNER JOIN ECO.Customers c ON o.CustomerID = c.CustomerID \n";
    deriveAlias(queryString);
    System.out.println("Alias: " + deriveAlias(queryString));
  }

  private static String deriveAlias(String queryString) {
    String query = queryString.replace('\n', ' ');
    final Pattern pattern = Pattern.compile(".*FROM ECO\\.[\\w]+ ([a-zA-Z]+).*");
    final Matcher matcher = pattern.matcher(query);
    if (matcher.matches()) {
      return matcher.group(1);
    }
    return null;
  }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61674691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档