[英]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.