java - Java 类中的 SQL 语句提取器

标签 java sql parsing extract

我有很多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 。

像这个 select 语句一样,还有 update、delete、insert 语句。

所以我想找到最终的串联SQL语句。也许这样我就可以找到哪个 java 模块使用哪个 Oracle 对象。

是否有任何插件、ide、应用程序、工具、java或其他语言代码等用于此操作?

最佳答案

有几种方法可以做到这一点。您可以使用定义查询的 String 对象,并且仅在相关类中定义它们,这可能无法维护。另一种选择是使用枚举来强制不变性,但这也会变得难以快速维护。正如您所说,另一种选择是 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
    }

}

关于java - Java 类中的 SQL 语句提取器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60773252/

相关文章:

java - 使用 appengine 时如何修复 "The server encountered an error and could not complete your request"?

java - 谷歌浏览器上奇怪的空白页

javascript - 如何在 JavaScript 中解析或查询复杂的 JSON

jquery 解析字符串

java - 表格单元格中的大表格调用分页符

SQL错误 "ORA-01722: invalid number"

sql - Oracle SQL - 从给定的字符串形成一个虚拟表以与另一个表连接

sql - 根据 XML 格式的列将一个结果集拆分为多个结果集

javascript - 解析命题逻辑串

java - 使用 Java 绑定(bind)在 Selenium 中自动化本地化 Web 应用程序的方法