我正在使用SQL Server 2017数据库和Spring启动项目。我不能用JPA。使用spring。我有一个需求,可以动态地向查询添加条件。
例如,在我的属性文件中已经有一个查询-
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“将非常好地工作。
现在,我需要找到从查询中获取别名的方法。
我试过以下几点:
String test = query.substring(query.indexOf("FROM ECO."));
System.out.println(test);其结果如下:
FROM ECO.Orders o我只需要从这个得到表别名。我想这可以用regex来完成。
发布于 2020-05-08 08:27:05
可以使用regex提取别名,如下面的示例所示:
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;
}https://stackoverflow.com/questions/61674691
复制相似问题