我有这样的代码.
final PreparedStatement stmt = connection
.prepareStatement("delete from " + fullTableName
+ " where name= ?");
stmt.setString(1, addressName);
Run Code Online (Sandbox Code Playgroud)
计算fullTableName是这样的:
public String getFullTableName(final String table) {
if (this.schemaDB != null) {
return this.schemaDB + "." + table;
}
return table;
}
Run Code Online (Sandbox Code Playgroud)
这schemaDB是环境的名称(可以随时间更改),table是表名(将被修复).
值schemaDB来自一个XML文件,使查询易受SQL注入攻击.
查询:我不确定如何将表名用作预准备语句(如name本示例中所使用的),这是针对SQL注入的100%安全措施.
任何人都可以建议我,可能有什么方法可以解决这个问题?
注意:我们将来可以迁移到DB2,因此该解决方案应该与Oracle和DB2兼容(如果可能的话,与数据库无关).
我的印象是session.load()在缓存中加载代理对象,同时session.get()总是访问数据库,但看到JavaBrains 视频后我感到困惑.
根据这段视频,当我们调用下面的get方法时,它正在加载UserDetails内存中的代理对象.
user = (UserDetails) session.get(UserDetails.class, 1);
Run Code Online (Sandbox Code Playgroud)
结构UserDetails是
在评论部分,一个人评论说:
没有User类的代理,而是创建了集合的代理对象.
现在这里有两个问题.
1st:与session.load()和session.get()的获取策略和代理对象的创建有关,我已经在下面回答了这个问题.
第二种:在这种情况下,代理对象将为UserDetails或集合创建(仍有待回答).
谢谢