开发者社区> 问答> 正文

Jfinal对于查询语句的多个参数赋值问题?报错

@JFinal 你好,想跟你请教个问题:

我希望查询多个表,所以需要传多个参数,我用的是Db的find方法,sql代码如下:


 "select w.content,w.count from wall w  WHERE uid = ? "
UNION 
"select s.content,s.count from sechand s  WHERE uid = ? "
UNION 
"select h.content,h.count from hangout h  WHERE uid = ? ";
方法如下:

public void findAllDynamic() {

//客户端传过来的用户id

int uid = getParaToInt(0)

int [] uids = {uid,uid,uid};
List<Record> dynamicList=Db.find(DaoConstant.DYNAMICSQL,uids);
setAttr("dynamicList" ,dynamicList);
setAttr("result", 1);
setAttr("msg", "success");
renderJson();

我有两个疑问恳求解惑:我只需要接受一个用户的id,给sql语句中的三个占位符赋予同样的值,有没有什么方法?

还有现在我把传过来的id放入数组分别给三个占位符赋值,但是这个方法执行错误,不知道为什么,在赋予第二个占位符时候报错

java.sql.SQLException: No value specified for parameter 2  求解答  



展开
收起
爱吃鱼的程序员 2020-06-22 11:11:09 697 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    不要建数组,直接find(sql,uid,uid,uid)

    我在后面跟参数的时候都是uid,uid,uid的,你这样的用一个数组是可以的吗?

    回复<aclass='referer'target='_blank'>@fyxjsj:你就别跟着list了,直接就用三个uid,uid,uid这样,传入就行了不可以,我想传一个uid就给三个参数赋值,但是没做到

      JFinalActiveRecrod插件仅仅对jdbc做了极薄封装,jfinal在拿到sql和参数后,直接就拿给jdbc去处理了,所以没有提供sql占位符传参的功能。这样做的好处是性能最大化,并且框架本身的复杂度会降低,不过未来仍然会考虑占位符传参的功能,主要看需求是否强烈。

      楼主碰到的sql执行错误,目测是where子句后面需要添加相应的别名,如w.uid s.uid h.uid

    回复<aclass='referer'target='_blank'>@竹林心风:目前还没有添加此功能,很多更重要的功能正在设计中,一步步来回复<aclass='referer'target='_blank'>@竹林心风:而且?太多的时候容易--对错了需求应该很强烈啊,不知道现在实现了没,只要出现多个?的地方,如果值是一样的,实在不想写那么长的参数,最好给一个Map<String,String>params,放入全部参数值,以免复杂sql参数列表太长不好看

    2020-06-22 11:11:25
    赞同 展开评论 打赏
问答分类:
SQL
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载

相关实验场景

更多