【发布时间】:2014-01-20 22:56:25
【问题描述】:
所以,我创建的解决方案抛出了这个异常:jdbc.SQLServerException: The result set has no current row 在下面代码中标记的行上。
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;
}
上面的方法,在引发异常的实例中,是从直接从同一个表中提取的 Entity 对象中获取真正的 siteID (22379)。在此方法中使用System.out.println(siteID); 时,它声明该数字仍然正确,即仍然是 22379。我通过在 SQL Server 中运行相同的语句直接检查了 SQL Server,所以我知道该行存在于表中,但由于某种原因,它没有被发现。下图。
所以问题是,ResultSet rs 没有找到该行,即使我知道它在那里。有没有人有任何有用的见解?
澄清:为了清楚起见,我知道 ResultsSet 不包含任何行,这就是我收到异常的原因。我也知道将 rs.next() 放入 if 语句将防止异常(如 cmets 中所述)。令我感到困惑的是,ResultSet 不包含任何行,即使具有被解析为它的 ID 的行确实存在,因为我已经直接使用 SQL 服务器对其进行了检查。
【问题讨论】:
-
@JunedAhsan 它应该是
rs.next()我认为,rs.hasNext()不存在于结果集中 -
@downvoter - 如果我的问题有问题,我需要知道它是什么。单独投反对票是没有帮助的。
-
您是否尝试使用常量值而不是
siteID?像SELECT SitePicture FROM SiteTable WHERE SiteID = 42或直接在 SQL 服务器上执行时产生正确结果的任何东西。 -
@MichałRybak - 实际上,据我所知,这个特殊问题只发生在一个站点的 ID 上,并且在其他所有场合都正确发生。所以,是的,它已尝试使用其他值并且工作正常。
-
@MichałRybak - 看起来我搞砸了。你是对的,我不应该确定我正在查询正确的数据库。我在此解决方案中分别使用 JPA 和 JDBC,JPA 连接详细信息是正确的,但 JDBC 是从没有此条目的旧测试数据库中解析的值。如果您能找到一种方式将其表述为可能对其他人有帮助的答案,那么我将投票并接受它。
标签: java exception jpa jdbc resultset