今天记录一个超级有鬼的事情:
Navicat里面SQL有结果,但是ResultSet.next()为空
首先来分析一下
(1)在Navicat里面测试SQL有结果,就说明 本身SQL是没有什么问题的,这点是可以肯定自己的。
(2)程序正确执行,PreparedStatement,Connection这些都没有问题,不然就会被catch捕获了。
(3)debug带入之后,发现是ResultSet.next()出现问题,思考下面的问题:
- 开始指针位置位于第一行之前,也就是说,第一次调用next()方法后才能开始获取数据。这种做法的好处在于可以方便地配合while进行遍历,而不用担心取不到第一行。
- 指针移动到最后一行之后返回false,可以用作循环结束的条件。在两种情况下:遍历到最后一行之后,或者当 ResultSet 中没有元素行数为0时,返回false退出循环。
一切都OK 啊
那为什么ResultSet.next()出现的没有出现结果呢?
看看我自己前端和后端代码:
<div class="article-category shadow">
<div class="article-category-title">分类导航</div>
<!--后面直接换成AJAX,比较方便 -->
<a href="${pageContext.request.contextPath }/ShowArticlesByType?type='forest'">林业</a>
<a href="${pageContext.request.contextPath }/ShowArticlesByType?type='fish'">渔业</a>
<a href="${pageContext.request.contextPath }/ShowArticlesByType?type='plants'">种植业</a>
<a href="${pageContext.request.contextPath }/ShowArticlesByType?type='sheep'">畜牧业</a>
<div class="clear"></div>
</div>
首先这是一个div块,他的结果展示为:
应该出现的结果是,点击相对应的导航,会出现各自的数据。
我的SQL:
select artical_id,img,date,title,author,type,look from artical where type=? limit 5
当然,我这里面使用的是放置SQL注入的PreparedStatement。所以有问号,这个不重要
之后我在Navicat里面测试了一下我的SQL,没问题哈,溜溜的
但是之后的结果我傻逼了,什么也没有,说好的5条东西呢?眼睁睁没了,忍不住抠电脑。。
这个时候看看自己进行前后端数据交互时候的参数*
看我黄色标志的地方,里面的参数是什么鬼!!
之后看看自己之前的代码:
那两个点点在参数中不能识别,肯定是他们搞的鬼!
修改之后:
你猜怎么着?
成功啦,那五行数据乖乖出现了!
所以总结:
前后端交互的时候,不管传递的是什么东东,都没有双引号
END
good lunck to you