我有以下代码,我正在尝试创建用户ID的广告jdoe,jdoe1,jdoe2等。 我正在检查唯一性(或对sql表存在用户ID)。我继续得到Exhausted resultSet错误。我理解这种情况正在发生,因为选择查询没有找到“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;
}
}
}
答案 0 :(得分:0)
您可以检测到您的查询在执行任何操作之前未返回任何行,从而导致抛出异常。 API documentation for ResultSet.next说:
当对下一个方法的调用返回false时,光标位于最后一行之后。任何需要当前行的ResultSet方法的调用都将导致抛出SQLException。
目前,您的代码正在放弃rs.next
返回的值,请让代码检查返回值。如果它是假的,则没有返回任何行,您可以避免调用rs.getString(1)
。
答案 1 :(得分:0)
我改变了我的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);
}
}