在Oracle中执行查询后,结果显示不正确。似乎有些数据被缓存,因此结果不正确。通过更改where子句中的某些条件(特别是与“不相等”相关的条件),结果将准确显示。这种情况在许多查询中都会发生,但第一次发生在具有高执行计数的Oracle中。
查询示例:
SELECT TB_MODEL.ID
FROM TB_MODEL
WHERE TB_MODEL.SUBJECT = ? AND TB_MODEL.STATUS <> ? AND TB_MODEL.PARENT_ID IS NOT NULL
字符串
结果:空(我确信数据库中有符合所需条件的数据)
有时,但并不总是,通过重置Oracle数据库,这个问题会解决。
Oracle RAC版本:21.3.0.0.0
JDBC驱动程序:23.3.0.23.09
更新1:
此示例代码返回0:
String query = "SELECT TB_MODEL.ID
FROM TB_MODEL
WHERE TB_MODEL.SUBJECT = ? AND TB_MODEL.STATUS <> ? AND TB_MODEL.PARENT_ID IS NOT NULL";
Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@//192.168.1.10:1521/dbk", "dbk", "dbk");
PreparedStatement statement = connection.prepareStatement(query);
statement.setByte(1, (byte) 3);
statement.setByte(2, (byte) 5);
ResultSet resultSet = statement.executeQuery();
int count = 0;
while (resultSet.next()) {
count++;
}
return count;
型
此示例代码返回0:
而这一个返回313!
String query = "SELECT TB_MODEL.ID
FROM TB_MODEL
WHERE TB_MODEL.SUBJECT = ? AND TB_MODEL.STATUS <> 5 AND TB_MODEL.PARENT_ID IS NOT NULL";
Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@//192.168.1.10:1521/dbk", "dbk", "dbk");
PreparedStatement statement = connection.prepareStatement(query);
statement.setByte(1, (byte) 3);
ResultSet resultSet = statement.executeQuery();
int count = 0;
while (resultSet.next()) {
count++;
}
return count;
型
更新2:
1.此问题发生在具有不等式条件(<>
)的查询中
1.在不等式条件(TB_MODEL.STATUS <> ?
-> TB_MODEL.STATUS <> 3
)下,通过改变约束值(?
)的固定值来解决该问题。
1条答案
按热度按时间5tmbdcev1#
un
COMMIT
ted数据只在创建它的会话中可见(如果它没有被COMMIT
ted,则会在会话结束时显示ROLLBACK
)。如果你不能从另一个会话中看到数据(即在C#中),请确保你已经在你INSERT
ed数据的SQL客户端(即SQL Developer)中发出了COMMIT
命令。COMMIT
文档:直到你提交一个事务:
ROLLBACK
语句回滚(撤消)事务期间所做的任何更改(请参见ROLLBACK
)。因此,即使你说:
数据库中已存在数据。
如果它是在另一个会话中创建的,并且没有被
COMMIT
删除,这并不重要,因为它对任何其他会话都不可见。您需要确保COMMIT
您的数据。