Java регулярное выражение получить псевдоним таблицы из SQL запроса - PullRequest
0 голосов
/ 08 мая 2020

Я использую базу данных SQL Server 2017 с проектом загрузки Spring. Не могу использовать JPA. Используя spring JDB C. У меня есть требование, по которому я могу динамически добавлять условия в запрос.

Например, в моем файле свойств уже есть запрос -

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

(ECO - это имя моей схемы, которое должно быть включено в запрос)

Теперь, в java мне нужно динамически добавлять условия - например. "where CustomerID = 1"

Проблема в том, что это вызовет

jdb c .SQLServerException: неоднозначное имя столбца CustomerID

Итак, у меня чтобы добавить псевдоним к этому столбцу.

"where o.CustomerID = 1" будет работать нормально.

Теперь мне нужно найти способ получить псевдоним из запроса.

Я пробовал следующее:

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

Что дает следующий результат:

FROM ECO.Orders o

Мне просто нужно получить псевдоним таблицы отсюда. Думаю, это можно сделать с помощью регулярного выражения.

1 Ответ

1 голос
/ 08 мая 2020

Вы можете извлечь псевдоним, как показано в следующем примере, используя регулярное выражение:

  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;
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...