繁体   English   中英

是什么导致Java程序不同地对待两个ResultSet.getString()方法?

[英]What is causing Java program to treat the two ResultSet.getString() methods differently?

如果“ FirstName”和索引1引用查询中的同一列,而rsResultSet ,为什么会这样

if(rs.getString("FirstName")!=null) fullName = rs.getString("FirstName");

if(rs.getString(1)!=null) fullName = rs.getString(1);

表现不同?

根据Java文档,使用columnIndexcolumnLabel都返回指定列的值。

当我使用columnIndex而不是columnLabel ,由于某种原因,在jsp运行了几个小时/天之后,我遇到了一个奇怪的问题,那就是if(rs.getString(1)!=null)计算为true即使String为null 当我改用columnLabel ,不会发生此问题。 谁能告诉我为什么会这样吗?

额外的背景信息

该程序在Tomcat中运行。 我们在同一天更新了Tomcat,JVM和数据库驱动程序,并且这种情况开始发生。 如果我们在Tomcat中重新加载该应用程序,则它至少在几个小时内就可以正常运行。 我们切换回旧的数据库驱动程序,问题仍然存在,因此我们排除了数据库驱动程序。

rs.getString(1)返回在执行您的SQL查询的第一列中的数据(由preparedStatement ),它不需要的FirstName ,则需要交叉检查,在您的SQL查询preparedStatement如下:

SELECT FirstName from X;//you might add where conditions

根据您的评论:

它只是开始返回字符串“ null”,而不是实际的null值。 因此,fullName变为字符串“ null”。

换句话说,问题与您的问题不同。 null"null"不是同一件事,因此,如果实际值为"null" ,则没有理由让rs.getString(1) == null返回true

我想说您的数据库中某处可能有"null" 校验。 否则,您可能在代码的某个地方使用String.valueOf(null) ,可能是间接地使用它,例如通过调用它的println(null) ,因此输出为"null"

我们已经解决了。 我们决定尝试使用其他SQL驱动程序(之前使用的是Microsoft驱动程序,后来切换到JTDS),所有问题都消失了。

所以我猜想微软驱动程序应该在返回null时返回字符串“ null”。

因此,为了回答这个问题, ResultSet.getString()方法可能一直表现正确,但是SQL驱动程序返回了错误的数据。

暂无
暂无

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

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