如果“FirstName”和索引1引用查询中的同一列,并且rs
是ResultSet
,为什么会
if(rs.getString("FirstName")!=null) fullName = rs.getString("FirstName");
和
if(rs.getString(1)!=null) fullName = rs.getString(1);
行为不同?
根据Java文档,使用columnIndex
或columnLabel
都返回指定列的值。
当我使用columnIndex
代替columnLabel
时出现了一个奇怪的问题,出于某种原因,在jsp运行了几个小时/天之后{{1}即使String为if(rs.getString(1)!=null)
,也会求值为true。当我使用null
代替时,问题不会发生。谁能告诉我为什么会这样呢?
该程序在Tomcat中运行。我们在同一天更新了Tomcat,JVM和我们的数据库驱动程序,并且这种情况开始发生了。如果我们在Tomcat中重新加载应用程序,它会开始正常工作,至少几个小时。我们切换回旧的数据库驱动程序,问题仍然存在,因此我们排除了数据库驱动程序。
答案 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驱动程序返回了错误的数据。