将动态SQL修复为准备好的语句

时间:2018-12-13 21:30:38

标签: java jdbc

我正在开始对动态SQL语句进行补救,以防止SQL注入。我有一个使用超过50个查询的Web UI。我想编写一个Java类来构建set语句,而无需提前知道原始类型,这样它可能会更通用?我希望有一门我不知道的课?我已经搜索了答案,但是我确定我搜索错了。 (即prepStatement.setInt(1,999); prepStatement.setString(2,“ Sammy”);等等。)

1 个答案:

答案 0 :(得分:0)

如果我正确理解了这个问题,您是否想在运行时动态构造PreparedStatement对象,而又不知道那些语句中的参数类型,可能是这样,您的代码就可以处理不同的表?

由此我得出结论,您需要找出列数据类型并调用适当的PreparedStatement.set*方法。

不考虑代码将如何接收表名和准备好的语句的参数值,可以通过调用Connection.getMetaData().getColumns(...)获得列信息。对于每一列,ResultSet中的对应行将包含一列DATA_TYPE,其中一列intjava.sql.Types之一相对应。

DatabaseMetaData界面提供了许多有用的方法来获取有关特定数据库的详细信息。