繁体   English   中英

java.sql.SQLException:使用select语句时用尽了结果集

[英]java.sql.SQLException: Exhausted Resultset while using select statement

我有以下代码段,其中我试图创建用户ID的广告jdoe,jdoe1,jdoe2等,以检查其唯一性(或针对SQL表的用户ID是否存在)。 我不断收到用尽的resultSet错误。 我知道发生这种情况是因为select查询找不到“ jdoe”(很好),但是我无法处理它。

PreparedStatement pstmt = conn.prepareStatement("SELECT DISTINCT name FROM t_av_accounts WHERE name = ? ");
    ResultSet rs = null;

/*Some more code here*/

ret = builder.toString();
        log.debug("** Start SUFFIX: " + suffix.toString() + "&& ret: " + ret);
        while(x){
            pstmt.setString(1, ret);
            rs = pstmt.executeQuery();
            if(rs != null){
                rs.next();
                if(rs.getString(1) == ret){
                    if(suffix==1)
                        ret.concat(suffix.toString());
                    else
                        ret.substring(ret.length()-1).concat(suffix.toString());
                ++suffix;
                log.debug("** Current SUFFIX: " + suffix.toString() + "&& ret: " + ret);
                }
                else{
                    ctx.setUserVariable(WorkflowContext.VariableLevel.Job, "AFXUSERCUSTOM_"+user.getId()+"_CUSTOM_USERID", ret.toLowerCase());
                    x = false;
                }
            }
        }

您可以在执行任何引发异常的操作之前检测到查询没有返回任何行。 ResultSet.nextAPI文档说:

当对next方法的调用返回false时,光标将位于最后一行之后。 任何需要当前行的ResultSet方法调用都会导致抛出SQLException。

当前,您的代码正在丢弃rs.next返回的值,而是让您的代码检查返回值。 如果为假,则不返回任何行,您可以避免调用rs.getString(1)

我更改了while循环:

while(x){
            pstmt.setString(1, ret);
            rs = pstmt.executeQuery();
            if(!rs.next()){
                ctx.setUserVariable(WorkflowContext.VariableLevel.Job, "AFXUSERCUSTOM_"+user.getId()+"_CUSTOM_USERID", ret);
                x = false;
            }
            else{
                rsName = rs.getString(1);
                if(suffix==1)
                    ret = ret.concat(suffix.toString());
                else
                    ret = (ret.substring(0,ret.length()-1)) + suffix.toString();
                ++suffix;
                log.error("** Current SUFFIX: " + suffix.toString() + " && ret: " + ret + " && rsName that found: " + rsName);
            }
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM