JDBC PreparedStatement相关问题

stoper_wang 2011-07-05 03:40:56
RT 用PreparedStatement预处理SQL语句 如 select * from user where name=? and password=?;
有没有办法得到?对应的数据库中的字段名称。
...全文
155 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
stoper_wang 2011-07-05
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 shine333 的回复:]

前面看错了

这个没办法,只能改写sql

比如传入
select * from user where name = ${name} and password = ${password}
或者
select * from user where name = :name and password = :password
然后,用正则表达式解析出来
select * from us……
[/Quote]
是个好办法,谢谢你的思路
shine333 2011-07-05
  • 打赏
  • 举报
回复
前面看错了

这个没办法,只能改写sql

比如传入
select * from user where name = ${name} and password = ${password}
或者
select * from user where name = :name and password = :password
然后,用正则表达式解析出来
select * from user where name = ? and password = ?
penghua12345 2011-07-05
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 stoper_wang 的回复:]
引用 10 楼 penghua12345 的回复:

一个表中那么多字段,谁能知道你是要通过哪个字段查询。要怎么查,总要确定查询的条件。你再整理下你的问题。难道,你是想通过实体的属性名,来确定字段名?

就是 “?”代表的那个字段的名字……
应该没那么难理解吧,也不一定是查询,总之SQL语句是未知的,我的目的就是想得到预处理的SQL语句中“?”号对应的字段的名称,这么说应该说得很清楚了吧……
[/Quote]
?本来就是未知,而且?也只是代表一个值而已。通过未知找未知?
shine333 2011-07-05
  • 打赏
  • 举报
回复
select * from table ==> ResultSet ==> ResultSetMetaData ==> 获得所有的列名列表
你要反射的对象 ==> java.lang.Class ==> JavaBean属性名列表

取两个列表的交集
stoper_wang 2011-07-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 penghua12345 的回复:]

一个表中那么多字段,谁能知道你是要通过哪个字段查询。要怎么查,总要确定查询的条件。你再整理下你的问题。难道,你是想通过实体的属性名,来确定字段名?
[/Quote]
就是 “?”代表的那个字段的名字……
应该没那么难理解吧,也不一定是查询,总之SQL语句是未知的,我的目的就是想得到预处理的SQL语句中“?”号对应的字段的名称,这么说应该说得很清楚了吧?
zn85600301 2011-07-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 stoper_wang 的回复:]

引用 5 楼 wula0010 的回复:

引用 3 楼 stoper_wang 的回复:
就像上面那个SQL,我需要实际赋值的就name和passwor这两个字段,我在代码中如何得到这两个字段名?

这两个是查询条件,你查询条件都不知道,那还查什么?!

要是想通过代码知道这个表的其他字段名,倒是可以,或者通过select * from user得到所有字段的名称,看看Resul……
[/Quote]
查询条件是已知的 只有值是未知的

都是先列出可能查询的字段 然后判断该字段属性参数是否为空 非空即查询

我还是没明白楼主是怎么动态反射的
penghua12345 2011-07-05
  • 打赏
  • 举报
回复
一个表中那么多字段,谁能知道你是要通过哪个字段查询。要怎么查,总要确定查询的条件。你再整理下你的问题。难道,你是想通过实体的属性名,来确定字段名?
stoper_wang 2011-07-05
  • 打赏
  • 举报
回复
追加50分求解,目前只能发100分的帖子,不好意思,望高手解答
stoper_wang 2011-07-05
  • 打赏
  • 举报
回复
ResultSetMetaData rsmd = rs.getMetaData(); 用这种方法,直接把表中所有的列都给获取到了,我的意思是只获取需要具体赋值的列名,并且这个好像是在遍历结果集的时候用的吧。
shine333 2011-07-05
  • 打赏
  • 举报
回复
ResultSetMetaData 正解
stoper_wang 2011-07-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wula0010 的回复:]

引用 3 楼 stoper_wang 的回复:
就像上面那个SQL,我需要实际赋值的就name和passwor这两个字段,我在代码中如何得到这两个字段名?

这两个是查询条件,你查询条件都不知道,那还查什么?!

要是想通过代码知道这个表的其他字段名,倒是可以,或者通过select * from user得到所有字段的名称,看看ResultSetMetaData 类的用法。
Java……
[/Quote]
我的意思是想获取需要传参的列名,利用反射跟实体做命名匹配,这样比较灵活,SQL语句中的查询条件本来就是未知的,这只不过是打个比方
wula0010 2011-07-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 stoper_wang 的回复:]
就像上面那个SQL,我需要实际赋值的就name和passwor这两个字段,我在代码中如何得到这两个字段名?
[/Quote]
这两个是查询条件,你查询条件都不知道,那还查什么?!

要是想通过代码知道这个表的其他字段名,倒是可以,或者通过select * from user得到所有字段的名称,看看ResultSetMetaData 类的用法。

ResultSetMetaData rsmd = rs.getMetaData();
stoper_wang 2011-07-05
  • 打赏
  • 举报
回复
顶帖给分!!!!!!!!!!!
stoper_wang 2011-07-05
  • 打赏
  • 举报
回复
就像上面那个SQL,我需要实际赋值的就name和passwor这两个字段,我在代码中如何得到这两个字段名?
stoper_wang 2011-07-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zn85600301 的回复:]

没明白 你意思是要取表的列名?
[/Quote]
取预处理的列名,就是需要赋值的列的名字。
zn85600301 2011-07-05
  • 打赏
  • 举报
回复
没明白 你意思是要取表的列名?

51,409

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧