传参的问题

传参的问题

 select count(*) from book_info where name like #{search} or   author like #{search}

       or class_id =(select class_id from class_info where class_name like #{search})     我是做了一个小型的图书管理系统,#{search} 是我搜索图书的时候在图书框输的内容,但是我发现

select count(*) from book_info where name like #{search} or author like #{search}  

这一段代码可以顺利执行,我输入书的作者或者书的名字,都可以查出来,但是class_id in(select class_id from class_info where class_name like #{search}) 我输入书的类别查不出东西,如果是 class_id =(select class_id from class_info where class_name like #{search}) 还会报错,报错信息为Subquery returns more than 1 row   ,但是我起初以为可能逻辑有问题,但是放在数据库的新建查询中 #{search}变成'文学'发现可以查出东西, 这是怎么回事呢

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好,在同学的xml文件中,sql需要传入的参数search是如何进行区分的呢?

http://img1.sycdn.imooc.com//climg/5f2a90cb0924ef6506590102.jpg

这里同学传递的书类别参数是否正确传入呢?

祝学习愉快~

  • 慕UI2433440 提问者 #1
    我发现问题了,我之前的sql语句其实不是这么写,我把他改了成了现在的sql语句,但是我查询的时候,系统还是用的是原来的sql语句,我重启电脑后打开查到的还是原来的sql语句查的东西
    2020-08-05 19:17:01
  • 慕UI2433440 提问者 #2
    也就是我运行的xml文件还是未更新的xml文件,这是咋回事
    2020-08-05 19:28:45
好帮手慕小脸 2020-08-05 18:16:11

同学你好,根据同学描述的内容来看,同学的sql是没有问题的,这里应该是代码问题,建议同学检查一下对应的sql字段是否正确呢?

另外,当sql语句为 class_id in时页面是否报错,(按f12查看)如果有,具体报什么错误呢?

祝学习愉快~

  • 提问者 慕UI2433440 #1
    我用了limit 1 后我发现都不报错了,但为啥我搜作者和书名就有东西,但是搜书的类别前端就啥都没有呢
    2020-08-05 18:35:19
好帮手慕小脸 2020-08-05 15:54:24

同学你好,

1、放在数据库的新建查询中 #{search}变成'文学'发现可以查出东西是指class_id in还是class_id =时能够查询出数据呢?建议同学描述清楚

2、Subquery returns more than 1 row这个错误的意思是指子查询的结果多于一行。这里同学可以尝试在子查询的条件语句末尾加 limit 1试试

祝学习愉快~

  • 提问者 慕UI2433440 #1
    controller层 @RequestMapping("/querybook.html") public ModelAndView queryBookDo(String searchWord) { if (bookService.matchBook(searchWord)) { ArrayList<Book> books = bookService.queryBook(searchWord); ModelAndView modelAndView = new ModelAndView("admin_books"); modelAndView.addObject("books", books); return modelAndView; } else { return new ModelAndView("admin_books", "error", "没有匹配的图书"); } } service层 public boolean matchBook(String searchWord) { return bookDao.matchBook(searchWord) > 0; } Dao层 public int matchBook(final String searchWord) { String search = "%" + searchWord + "%"; return sqlSessionTemplate.selectOne("com.library.dao.BookDao.matchBook", search); } xml中<select id="matchBook" resultType="int" parameterType="String"> select count(*) from book_info where name like #{search} or author like #{search} or class_id =(select class_id from class_info where class_name like #{search}) limit 1 </select> 如果只是在数据库中新建查询,不管是class_id in还是class_id =都能够查询出数据,且不管用limit还是不用,都只会查出一条count记录,但是如果和前端联系起来,class_id in不报错,但是查不出东西,class_id =会报错,即使用上limit 1
    2020-08-05 16:20:56
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星

相似问题

登录后可查看更多问答,登录/注册

请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师