查询在 JDBC 中使用时返回的行数少于 SQL 开发人员
Posted
技术标签:
【中文标题】查询在 JDBC 中使用时返回的行数少于 SQL 开发人员【英文标题】:Query returns less rows when used in JDBC then SQL developer 【发布时间】:2015-12-22 09:04:17 【问题描述】:我正在使用 JDBC 使用 prepareStatement 和 executeQuery 连接到 oracle 数据库。但是当我在 SQL 开发人员的数据库上使用相同的查询时,我发现通过 JDBC 返回的行数比实际少得多。
这可能是由于连接问题或查询或语句造成的吗?谁能帮帮我。
这是我在 SQL developer 中运行的查询-
select count(*)
from xxx
where (TIME_STAMP between
TO_TIMESTAMP('2015-12-22 09:45:37.0','YYYY-MM-DD HH24:MI:SS.ff')
and TO_TIMESTAMP('2015-12-22 09:55:37.0','YYYY-MM-DD HH24:MI:SS.ff'))
AND (customerid not like '[null]')
AND (applicationid not like '[null]')
and (status not like '-');
编辑:我在 while(resultSet.next()) 中使用了一个变量计数器来计算返回的行数,从那里我知道返回的行数是不同的。这是下面的 JDBC 代码-
String query = "select * from xxx where
(TIME_STAMP between TO_TIMESTAMP('2015-12-22 09:45:37.0','YYYY-MM-DD HH24:MI:SS.ff') and
TO_TIMESTAMP('2015-12-22 09:55:37.0','YYYY-MM-DD HH24:MI:SS.ff'))
AND (customerid not like '[null]')
AND (applicationid not like '[null]')
and (status not like '-')";
stmt = con.prepareStatement(query);
rs = stmt.executeQuery(query);
while (rs.next())
counter++;
【问题讨论】:
select count(*)
您的查询将始终仅返回 1 行,即仅返回计数。多行的问题在哪里?
这是我在 SQL 开发人员中用来检查行数的查询。在 JDBC 中,我在 while(resultSet.next()) 中使用了一个变量来检查返回了多少行
请发布您在 SQL 开发人员(完整语句)和通过 JDBC(完整 prepareStatement()
和 executeQuery()
调用)中运行的 exact 查询。因为就目前而言,答案是:您没有运行相同的查询。
@LalitKumarB 我已经编辑了完整的细节
@Jaydeep 当您在 JDBC 代码中也使用 count(*)
时会发生什么?
【参考方案1】:
首先,请确保您连接到同一个数据库。 (如果您有可能用于测试的其他人等等)
然后,查看您的查询,最可疑的点似乎是日期转换。您可以分析两个不同的结果集并检查您输入的日期时间段是否与结果匹配。如果其中之一在日期值方面包含意外结果,则问题可能与您的 Java 虚拟机或 Oracle 服务器的默认时区有关。
【讨论】:
以上是关于查询在 JDBC 中使用时返回的行数少于 SQL 开发人员的主要内容,如果未能解决你的问题,请参考以下文章
DataTable.Load 显示的行数少于源 DataReader