TransientDataAccessPresourceException

20201127
1.
(1)错误:
在这里插入图片描述

消息PreparedStatementCallback; SQL [从1 = 1的用户中选择count(*)];参数索引超出范围(1>参数数量,即0)。嵌套异常是java.sql.SQLException:参数索引超出范围(1>参数数量,为0)。

不知道什么什么东西,导致的索引超出范围

(2)原因:
在这里插入图片描述
把sb.toString() 写成了 sql

仔细研究,发现返回的queryForObject()函数,第一个参数应该是一个字符串
在这里插入图片描述

如果写成sql ,那返回的代码就是最初始的不完整的代码,就会提示sql 报错
Parameter Index out of range(1 > number of Parameter, which is 0)
找不到所需要的东西,超出了范围,自然报错
在这里插入图片描述
要想返回出处理后的代码,必须返回sb.toString().
在这里插入图片描述

(3)找出过程:
代码报错提示和select count(*) from user where 1 = 1 ,因此专注于和这个sql 相关的函数代码块findTotalCount。

==>
要么把所有调用了findTotalCount 的servlet 中的函数都检查一遍;
要么把整个findTotalCount 都替换掉,换成视频教程提供的代码块,尝试能否运行成功。

当尝试方法(2)之后,发现服务器运行成功了,没有报错,就知道是findTotalCount 函数模块的代码中有问题。回想起昨天debug 了一下午,最后都是在return 代码结束后报错。于是猜测return 代码可能有问题,打开视频教程提供的代码源文件,对比了下,发现错在把返回参数sb.toString() 写成了sql 。

(4)回顾
重新回顾观看的视频教程,发现教程中的老师在讲述过程中,花了3秒钟把sql 改成了 sb.toString(),而我值注意到他添加了一行代码System.out.println(sb.toString())。Return 函数那里没有改过来,导致了这次错误的发生。( 为了找出这个错误,大概花了4.5 个小时。昨天debug 了一下午还没找出错误,非常急躁)

总结:经验教训总是有的,但是不能急躁,必须把该搞懂原理,从原理出发,才好下手找出错误,所做出的努力不会白费,经验教训总会收获,结果怎样并不会影响自己对知识的积累。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值