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