我有一个自定义Java查询引擎,它生成一个SQL字符串(带有?作为数据占位符)和一个包含要绑定到占位符的数据的对象列表。然后将其传递给JDBCTemplate.queryForList(sql,bindings.toArray())API以生成结果集。
这很好用,但是我还需要在子查询中使用这个SQL,并且无法找到一种(简单方法)从这种转换为直接SQL(使用Java类型和数据库友好格式之间的正确数据库转换,等)。
是否有实用程序可以执行此操作?
答案 0 :(得分:1)
您可能需要查看以下实用程序 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查询。
希望这有帮助,