纷飞的紫外线 2022-02-16 16:37 采纳率: 80%
浏览 57
已结题

jsp中使用if(rs.next())后数据库查询异常,只用while(rs.next())就没问题,但是又无法作出判断

问题遇到的现象和发生背景

SQL SERVER数据库中包含了车辆信息,现在想要输入车牌号进行模糊查询,然后将查询结果显示在页面上

问题相关代码,请勿粘贴截图

查询页面:

<title>车牌查询</title>

车辆信息查询

<input type="text" />
查询
查询结果页面: <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ page import="java.sql.*" %>
<!-- 在网页的<head>中增加这句话,可以让网页的宽度自动适应手机屏幕的宽度。 -->
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
   <!--  指定css的位置 -->
<link href="css/style.css" rel="stylesheet" type="text/css" /> 
<!-- 接收输入的车牌号,并在数据库中查询 -->
<title>查询结果</title>

<%
//接收数据
    String CarN=request.getParameter("CarN");
//编码转换
    CarN = new String(CarN.getBytes("ISO-8859-1"),"UTF-8");

try {
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    String url = "jdbc:sqlserver://192.168.1.2:1433;DatabaseName=CAR";
    String username = "sa";
    String password = "1234567";
    
    Connection conn=DriverManager.getConnection(url, username, password);
    //成功连接数据库则conn不为空
    if(conn !=null){
        Statement stmt = null;
        ResultSet rs = null;
        //精确查询
        //String sql = "SELECT * FROM CAR.dbo.CarInfo WHERE CarNum = '"+CarN+"'";
        //模糊查询
        String sql = "SELECT * FROM CAR.dbo.CarInfo WHERE CarNum LIKE '%"+CarN+"%'";
        stmt = conn.createStatement();
        rs = stmt.executeQuery(sql);
        
        if(rs.next()) {
            while (rs.next()) {
            %>
            <div id="rs_title">
                <p>车牌号 <% out.print(rs.getString("CarNum")); %> 的信息如下</p>
            </div>
            <div id="rs_content">
                <form>
                    <table class="s_table">
                        <tr id="s_tr">
                            <!-- 这里第一行要跨行合并单元格 -->
                            <th id="s_th">住址:<% out.print(rs.getInt("LouHao")); %>号楼<% out.print(rs.getInt("DanYuan")); %>单元<% out.print(rs.getInt("MenPai")); %></th>
                        </tr>
                        <tr id="s_tr">
                            <th id="s_th">房主:<% out.print(rs.getString("Name")); %></th>
                    
                            <th id="s_th">电话:<a href="tel:<% out.print(rs.getString("Phone")); %>"><% out.print(rs.getString("Phone")); %></a></th>
                        </tr>
                        <tr id="s_tr">
                            <th id="s_th">车主:<% out.print(rs.getString("XSZName")); %></th>
                            <th id="s_th">电话:<a href="tel:<% out.print(rs.getString("CarPhone")); %>"><% out.print(rs.getString("CarPhone")); %></a></th>
                        </tr>
                    </table>
                    <div>
                        <p id="s_zhu">注:未录入系统的部分会显示为“ null ”。</p>
                    </div>
                </form>
            </div>
            <%
            }
            rs.close();
            stmt.close();
        }else {
            %>
            <div  align="center">
                <img id="bg_noinfo" src="image/noinfo.png" />
                <p id="text_noinfo"><% out.print("未查询到相关车辆信息!");%></p>
            </div>
            <%
            }
    }
    else{
        %>
        <div>
            <p><% out.print("数据库连接异常,请联系管理员!"); %></p>
        </div>
        <%
    }
 }catch (Exception e){
     %>
     <div>
         <p><% out.print("数据库连接失败!"); %></p>
     </div>
     <%
 }
 %>

<div id="back_row" align="center">
    <button id="back" type="button" onclick="window.loca“”tion.href='chaxun.html'">返回</button>
</div>
运行结果及报错内容

这样写好之后输入准确的车牌号什么也查询不到,也不输出程序中的out.print信息,但是输入一两位数的话就可以正常查询到。然而输入错误的车牌号后可以输出“未查询到相关车辆信息”
然后我尝试去掉if(rs.next())语句,这个时候就模糊查询正常了,但是输入错误的车牌的话却不能提示“未查询到相关车辆信息”
是不是我的代码写的有问题?

我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

3条回答 默认 最新

  • Tomshidi 2022-02-16 17:19
    关注

    next()会让游标往后走一位,你用if(rs.next()),再用while(rs.next()),相当于游标后移了两位,第一位的数据就丢失了,这时如果你的查询结果里只有一条数据,就会出现你说的:虽然输入了正确了条件但查不出结果。
    结论:去掉if(rs.next())while(rs.next())本身就有判断的功能。另外,当while里面一次都没执行,就说明没有找到数据,也就是输出未查询到相关车辆信息,所以你的判断条件需要调整一下。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月25日
  • 已采纳回答 2月17日
  • 创建了问题 2月16日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效