是什么导致Java程序以不同方式处理两个ResultSet.getString()方法?

时间:2016-11-10 22:54:11

标签: java resultset

如果“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运行了几个小时/天之后{{1}即使String为if(rs.getString(1)!=null),也会求值为true。当我使用null代替时,问题不会发生。谁能告诉我为什么会这样呢?

额外背景信息

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

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

来自你的评论:

  

它只是开始返回String" null"而不是实际的空值。所以fullName变成了String" null"。

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

我会说你的数据库中可能有"null"。校验。或者你在代码中的某个地方使用String.valueOf(null),可能是间接的,例如通过调用它的println(null),输出为"null"

答案 2 :(得分:0)

我们已经解决了。我们决定尝试不同的SQL驱动程序(之前我们使用过Microsoft驱动程序,我们切换到JTDS)并且所有问题都已消失。

所以我猜测Microsoft驱动程序正在返回字符串&#34; null&#34;应该什么时候返回null

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