这么用PreparedStatement做多条件查询?

xbinwang 2008-06-04 01:35:18

String sql="Select * from AA where a=? and b=? and c=?";
pstat=conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
pstat.setString(1, isActivation);
pstat.setString(2, userName);
pstat.setString(3, Name);

但是a,b,c都是可能有也可能没有的,这样的话sql要重新写了,pstat.setString的个数也不确定,于是就要写很多if判断情况?但是可能性实在太多,写的代码就很多,很杂。大家有什么解决方法吗?
...全文
445 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jofy1004 2008-06-05
  • 打赏
  • 举报
回复
...........
yojiwei 2008-06-05
  • 打赏
  • 举报
回复
既然是条件判断查询,a,b,C 都是可有可无的,那你应该在SQL语句之前就加判断啦。
或者你可以用QBC查询,这样的话,就可以不用考虑到条件是否存在啦。
zhouzongxi 2008-06-05
  • 打赏
  • 举报
回复
那你还是写个方法封装吧。。在方法里面判断好
然后根据判断条件写sql..
xbinwang 2008-06-05
  • 打赏
  • 举报
回复
我把问题再说清楚一点好了。
String sql="Select * from AA where a=? and b=? and c=?";
那查询时可能a的状态无所谓。那就变成了
String sql="Select * from AA where b=? and c=?";
那pstat.setString()的个数也就不一样了。
那么b的状态无所谓时呢,c,ab,ac,bc,abc很多情况啊。而这只是3个参数时的情况,更多时就更复杂了
hong_bo 2008-06-04
  • 打赏
  • 举报
回复
方法加两个参数,String sql,String[] arg
sql==查询语句
arg==传递的参数
然后循环pstat.setString(1,XX);

要不就传连个数据参数,一个是表中的列名另一个是value,循环拼sql

你看成吗?我是没这么用过,以前也是每个方法都要写,现在用hibernate
dmewy 2008-06-04
  • 打赏
  • 举报
回复
如果这样你就觉得很多的话.建议你还是不要写了..
Ryo_Hazuki 2008-06-04
  • 打赏
  • 举报
回复
可以自己封装个函数的
zhj92lxs 2008-06-04
  • 打赏
  • 举报
回复
还是if吧
wangshizhu79 2008-06-04
  • 打赏
  • 举报
回复
同一个表里 某字段有就是有,没有就是没有
如果你说的没有是指字段内容为null或者''
你只须指定
pstat.setString(1, isActivation);
pstat.setString(2, userName);
pstat.setString(3, Name);
没有的项为null或者''(这要根据你表的设计)
如默认值为''
userName = userName == null ? '' : userName;
如果你a b c字段的默认值为null 就什么也不用管了

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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