簡體   English   中英

Java 正則表達式從 SQL 查詢中獲取表別名

[英]Java regex get table alias from SQL query

我正在使用 SQL Server 2017 數據庫和 Spring 引導項目。 我不能使用 JPA。 使用 spring JDBC。 我有一個要求,我可以動態地向查詢添加條件。

例如,我的屬性文件中已經有一個查詢可用 -

SELECT o.OrderID, c.CustomerName
FROM ECO.Orders o
INNER JOIN ECO.Customers c ON o.CustomerID = c.CustomerID 

(ECO 是我的模式名稱,必須包含在查詢中)

現在,在 java 中,我需要動態調整 append 條件 - 例如。 where CustomerID = 1

問題是它會拋出

jdbc.SQLServerException:列名不明確 CustomerID

所以我必須給這個列添加一個別名。

where o.CustomerID = 1 ”絕對可以正常工作。

現在,我需要找到一種從查詢中獲取別名的方法。

我試過以下:

 String test = query.substring(query.indexOf("FROM ECO."));
 System.out.println(test);

這給出了以下結果:

FROM ECO.Orders o

我只需要從中獲取 Table 別名。 我想這可以用正則表達式來完成。

您可以使用正則表達式提取別名,如以下示例所示:

  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;
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM