我有一个使用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
答案 0 :(得分:3)
您可以使用Connection.setSchema
指定JDBC连接的架构。这应该在创建Statement以执行SQL命令之前完成。