将列名作为 PreparedStatement 的输入参数
Posted
技术标签:
【中文标题】将列名作为 PreparedStatement 的输入参数【英文标题】:Having a Column name as Input Parameter of a PreparedStatement 【发布时间】:2021-12-27 02:16:24 【问题描述】:我已经在此处(以及其他论坛)使用了搜索,但没有找到与我正在尝试做的事情完全一致的答案。
我知道它可以通过其他方式轻松完成,这只是我为大学课程编写的一个小型沙盒框架......在真实环境中,我只需要 Spring、Hibernate 等。
所以我所做的就是为自己编写一个带有 POJO 的小型通用数据访问层,使用通用方法来检索、检查或将数据插入数据库 (Oracle)。其中大部分是通过 PreparedStatements 完成的。
只要我没有连接就可以工作...是否可以将列作为参数放入?
例子:
Table A has Attribute X + others
Table B has Attribute Y + others
带有查询SELECT * FROM A,B WHERE "A"."X" = ?
的PreparedStatement
然后填写“B”.“Y”作为参数...
数据库没有抛出错误或异常,但执行语句后返回的ResultSet
为空。是不可能做的,还是我只是错过了一些转义?
我正在使用PreparedStatement.setString(int index, String value)
来填写参数……我不知道我可以使用哪些其他 setX 方法……
再一次,在一个真实的项目中,我永远不会自己编写代码,而是使用 Spring 或 Hibernate 之类的东西,而不是重新发明***,但我认为编写这样一个通用的小型数据访问层是一个有趣的练习我自己。
【问题讨论】:
【参考方案1】:不,JDBC 不允许这样做。只能设置列值。如果要对 sql 语句进行动态更改,则必须在创建 PreparedStatement 之前进行。
【讨论】:
我已经预料到了...我有一个用于检索任何数据的通用方法,也许我只是使用 JOIN 参数创建它的重载方法,然后将其添加到字符串中...但谢谢。以上是关于将列名作为 PreparedStatement 的输入参数的主要内容,如果未能解决你的问题,请参考以下文章
Eclipselink NamedNativeQuery 将列名作为参数而不是值传递