SQL Экстрактор отчетов в Java классе - PullRequest
0 голосов
/ 20 марта 2020

У меня есть много компонентов java, которые подключаются к базе данных Oracle и выполняют команды DML. Я ищу, какой java модуль, используя какие Oracle объекты.

Я хочу извлечь SQL операторов, но заявления различны.

Например;

StringBuilder or StringBuffer named sb
sb.append("select * from oracle_table");
sb.append("inner join oracle_table2");
(PreparedStatement p).executeQuery(sb);

или все операторы sql в одной строковой переменной. или hibernate.

Подобно этому оператору выбора существуют операторы update, delete, insert.

Поэтому я хочу найти окончательные составные операторы SQL. Может быть, тогда я смогу найти, какой java модуль использует какие Oracle объекты.

Есть ли какой-нибудь плагин, ide, приложение, инструмент, java или другой код языка и т. Д. c для этой операции?

1 Ответ

0 голосов
/ 20 марта 2020

Есть несколько способов сделать это. Вы можете использовать объекты String, которые определяют запрос и определяют их только в относительных классах, это может быть невозможно. Другим вариантом было бы использование enum для принудительной неизменности, но это также быстро стало бы невозможным. Другой вариант, как вы заявили, это Hibernate, который решит вашу проблему, но добавляет слой сложности и сложности, так что есть кривая обучения. Простым вариантом будет простое определение запросов в типе файла, например Свойства или JSON.

Свойства

query.user.select = SELECT * FROM user WHERE name = ?;

JSON

[
    {
        "name": "user.select",
        "query": "SELECT * FROM user WHERE name = ?;"
    }
]
class NamedQuery {

    private final String name;

    private final String query;

}

Тогда вы можете создать некоторый неизменный класс, состоящий из этих объектов NamedQuery.

class QueryService {

    // use ImmutableSet to enforce immutability
    private final Set<NamedQuery> queries;

    // constructor (create from JSON file using GSON for example)
    public QueryService(Set<NamedQuery> queries) {
        this.queries = queries;
    }

    public NamedQuery get(String name) {
        // get for name, could even use a Map for faster lookup if needed
    }

}
...