使用准备好的语句和变量绑定在Java中使用JDBC驱动程序

我在用着

> jdbcTemplate来使JDBC连接到一个mySQL数据库
>准备好的语句,尽可能保护自己免受SQL注入攻击
>需要接受用户对十几个不同列中的数据进行排序的请求
>以下语句

jdbcTemplate.query("SELECT * FROM TABLE1 ORDER BY ? ?",colName,sortOrder);

当然这不起作用,因为变量绑定不应该指定列名称,只是查询中表达式的参数值.

所以…人们如何解决这个问题?只是在Java代码中进行排序似乎是一个简单的解决方案,但是由于我得到一个可以排序列的变量字符串,一个变量告诉我排序顺序….这是比较器条件的丑陋数量盖.这似乎应该是解决它的常见模式的常见问题?

解决方法

占位符?只能用于参数值,但不能用于列和排序顺序方向.所以这样做的标准方法就是指出.
here是使用
String#format()或类似的东西来附加您的列名称和订单值给您的查询.

另一种选择是使用Spring Data JPA,您可以在其中将参数作为参数赋予类型为Sort的实例,该实例可以包含数据库进行排序的所有必需信息.

dawei

【声明】:淮南站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。