SQL结果集处理

3

有人能帮我解决这个 SQL 问题吗?实际上我知道只会返回一条记录,但是现在代码还是会跳转到异常处理部分。

好的...我修改了代码后还是得到同样的结果。依旧会跳转到异常处理部分。

<%
String sqlpminfo = "select ea.PreferredName, ea.LastName, ea.AreaCityCode, ea.PhoneNo, eemail.EmployeeEmailAddress from Program p join ProgramXXXEmployeeRole pxxx on pxxx.ProgramID = p.ProgramID and pxxx.RoleCode=799 join EmployeeAdmin ea on ea.XXXEmployeeCode = pxxx.XXXEmployeeCode join EmployeeEmail eemail on eemail.XXXEmployeeCode = pxxx.XXXEmployeeCode where p.ProgramID=" + formFields.getValue("programID");

  try { 
        log.info(sqlpminfo);
        log.info("programID: " + formFields.getValue("programID"));
        QueryWrap pmwrap = new QueryWrap();
        ResultSet pmrt = pmwrap.executeQueryWithException(sqlpminfo);
                if (pmrt == null || pmrt.equals(""))
                 {  pmrt.close();


         }
         else
         {
            int i = 0;
            while ( pmrt.next() )
            {
                        String pmFname = pmrt.getString(1);
                        String pmLname = pmrt.getString(2);
                        String pmAreacode = pmrt.getString(3);
                        String pmPhone = pmrt.getString(4);
                        String pmemail = pmrt.getString(5);
                        log.info ("PM Contact: " + pmrt.getString(1) + " " + pmrt.getString(2) );

                        %>
                        Name:  <%=pmFname%> <%=pmLname%> <br/>
                        Email: <a href="mailto:<%=pmemail%>"><%=pmemail%></a><br/>

                        Phone: (<%=pmAreacode%>) 
                        <%if (pmPhone.length() == 7) {%><%=pmPhone.substring(0, 3)%>-<%=pmPhone.substring(3, 7)%>   <%} else {%><%=pmPhone%><%} %>
                        <br/><br/>
                        <%

                        i++;
                     } //end of while

                    pmrt.close();
                    if(i == 0)
            {
             %>
                            Contact Information is not available. Please email <br/>
                        <%
            }
                } //end if if 

        } catch (Exception ee) {
                        %>
            log.error("caught exception in PMcontactinfo: " + e);



<%  }%>

经过进一步的故障排除,发现我在一个表中有权限问题...实际上是一个视图。然后组成该视图的表也存在权限问题。 - shykitten
2个回答

0

pmrt.last():将光标移动到结果集的最后一行。
pmrt.getRow():返回行号。如果您有10个匹配结果,则在您的情况下将返回10。
pmrt.beforeFirst():将光标再次设置为结果集的第一行之前。现在,您可以使用pmrt.next()获取结果集中的第一行。

您能否在此处粘贴您收到的异常。


@ChannaJayamuni和DheerajKumarGopa,感谢你们的帮助。我做了一些修改,但我的代码仍然失败/无法捕获异常。当我从日志中提取SQL语句时,我可以在SQL Studio中执行它并获取记录。但是在jsp中它就不起作用。 - shykitten

0

ResultSet Java的行为

考虑一排书架,当你从左侧开始查找一本书时。

enter image description here

  1. 当你开始查找时,你不在第一本书上。你在第一本书之前。关于 ResultSet,它说的是 ResultSetbeforeFirst 位置。通过调用 beforeFirst() 方法,ResultSet 允许指向此位置。由于你还没有开始迭代,所以无法获取行号。
  2. 当你调用 ResultSetnext() 方法将光标移动到第一行时,类似于看书架上的第一本书。此外,你可以通过调用 first() 方法将指针定位到第一行,同样地,ResultSet 也允许这样做。
  3. 在检查第一本书之后,你要检查下一本书。同样地,通过调用 next() 方法,ResultSet 允许将光标移动到下一行。
  4. 想象一下,如果你已经到达了书架上的最后一本书。你能检查下一本书吗?不能,因为最后一行之后没有书存在。同样地,当光标位于最后一行时,你不能调用 ResultSetnext() 方法。
  5. 此外,ResultSetnext() 方法返回一个布尔值,指示是否还存在更多的行。当没有更多的行存在时,它返回 false
  6. 你可以像找到书架上的第一本书一样确定最后一本书。同样地,通过调用 last() 方法,ResultSet 允许指向最后一行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接