使用动态模式进行查询而不使用字符串连接

时间:2016-03-30 14:21:02

标签: java oracle jdbc spring-jdbc

我有一个使用Oracle数据库的系统,其架构与应用程序用户不同。模式名称本身不是事先知道的,因此我们不能对其进行硬编码。它是一个系统属性。

大多数数据访问都是通过Hibernate进行的,Hibernate可以指定连接上的默认模式,因此在这些情况下这不是问题。

但是,有一些地方使用了纯SQL查询(使用spring jdbcTemplate)。所以现在我们有一些归结为:

Map<String,Object> result = jdbcTemplate.queryForMap("SELECT A, B, C FROM "+schema+".TABLE WHERE blablablah");

当然,这是一个开放的SQL注入漏洞。我们正在计划安全审核,这将被标记为肯定。

所以问题是:我如何在查询中指定模式,无论是使用jdbcTemplate,另一个Sprint数据访问实用程序,还是普通的jdbc?

谢谢你, JGN

1 个答案:

答案 0 :(得分:3)

您可以使用Connection.setSchema指定JDBC连接的架构。这应该在创建Statement以执行SQL命令之前完成。