我有一个自定义 Java 查询引擎,它生成一个 SQL 字符串(使用 ? 作为数据占位符)和一个包含要绑定(bind)到占位符的数据的对象列表。然后将其传递给 JDBCTemplate.queryForList(sql, bindings.toArray()) API 以生成结果集。
这工作正常,但我还需要在子查询中使用此 SQL,并且无法找到一种(简单的方法)将此 SQL 转换为直接 SQL(使用 Java 类型和数据库友好格式之间的正确数据库转换,等)。
是否有实用程序可以执行此操作?
最佳答案
您可能想查看以下实用程序。
http://commons.apache.org/dbutils/
虽然这不会直接回答您的问题,但它将来可能会有用。我也遇到了这个问题,我设计了一种对我有用的方法,尽管不是最好的。我创建了一个方法,可以按照您的建议自动填充参数值,但它根本不以类型安全的方式执行此操作。无论如何,如果您决定使用该方法,也许您可以采用该方法并对其进行改进:
public static String preparedQueryString(String staticQuery, Object... parameters) {
for(Object curParameter : parameters) {
if(curParameter instanceof String) {
staticQuery = staticQuery.replaceFirst("\\?", "'" + curParameter.toString() + "'");
} else {
staticQuery = staticQuery.replaceFirst("\\?", curParameter.toString());
}
return staticQuery;
}
您可能还想添加代码以确保参数的数量不超过问号的数量,并且您可能还想使 java 类型更适合您使用的数据库。我用它来输出PreparedStatement的SQL,因为PreparedStatement没有任何好的功能可以让您在设置适当的参数后撕掉完成的SQL查询。
希望这有帮助,
关于java - 将 SQL 和绑定(bind)数据转换为直接 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5011570/