gpt4 book ai didi

java - JDBC.SQLServerException : The result set has no current row 异常

转载 作者:搜寻专家 更新时间:2023-10-31 19:55:31 24 4
gpt4 key购买 nike

所以,我创建的一个解决方案抛出了这个异常:jdbc.SQLServerException: The result set has no current row on the line marked in the below code.

public String get64BitEncodedImageBySiteID(int siteID){
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection conn = DriverManager.getConnection(url, userName, password);

Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery( "SELECT SitePicture FROM SiteTable WHERE SiteID ="+siteID );

rs.next();
// The above line has since been moved to the if statement below where you can see it commented out,
// which prevents the exception from occuring but still doesn't fix the fact that the row is not being found.

if(/*rs.next() &&*/ rs.getBytes("SitePicture")!=null){ // EXCEPTION THROWN HERE!
byte ba[] = rs.getBytes("SitePicture");
return new sun.misc.BASE64Encoder().encodeBuffer(ba);
}
else {return null;}
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}

在抛出异常的情况下,上面的方法是从直接从同一个表中提取的实体对象中获取真实的 siteID (22379)。在此方法中使用 System.out.println(siteID); 时,它声明该数字仍然是正确的,即仍然是 22379。我通过在SQL Server,所以我知道表中存在该行,但由于某种原因未找到它。下图。

enter image description here

所以问题是,ResultsSet rs 没有找到该行,即使我知道它在那里。有没有人有任何有用的见解?

澄清:为了清楚起见,我知道 ResultsSet 不包含任何行,这就是我得到异常的原因。我也知道将 rs.next() 放入 if 语句将防止异常(如评论中所述)。令我困惑的是,ResultsSet 不包含任何行,尽管 ID 被解析到它的行确实存在,因为我已经直接用 SQL 服务器检查了它。

最佳答案

结果是本地错误,但我还是把解决方案贴出来了,因为这种情况有一定的教育意义。

正如我从@Ralph 对this answer 的评论中了解到的那样,消除“不可能”是解决此类问题的好方法。

在避免了 siteID 错误的风险(通过硬编码)之后,我们有以下情况:

  • 相同的确切查询在一个环境中有效,但在另一个环境中无效,仅针对一个特定的 SiteID,2184
  • ResultSet 不可能这个特定值不起作用(我声称是,因为我总是假设错误在我的代码中,而不是在语言库中)
  • 如果是这样,数据库必须不同

关于java - JDBC.SQLServerException : The result set has no current row 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20900819/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com