有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在简单的JDBC查询中,Oracle驱动程序是否可以看到外部更新?

我一直在试图理解,使用JDBC和Oracle驱动程序(ojdbc6.jar,db version 11.2),从不同会话进行的更新将如何影响运行程序所持有的会话。我对这里的文档感到困惑,尤其是表17-1:http://docs.oracle.com/cd/E11882_01/java.112/e16548/resltset.htm#JJDBC28628

假设以下代码:

String SQL_QUERY = "select duration, cost from sample_table where name = ? and day = ? and type = ?";

PreparedStatement ps = connection.prepareStatement(SQL_QUERY);

ps.setString(1,name);
ps.setInt(2,day);
ps.setInt(3,type);

ResultSet rs = ps.executeQuery();

if (rs.next()) {
    SampleObject so = new SampleObject(); //default constructor
    so.setDuration(rs.getInt(1));
    so.setRate(rs.getDouble(2));
}

rs.close();
//and so on...

假设我为几个不同的参数多次运行这个查询,我的程序已经运行了几个小时

通过另一个会话(在我的例子中是sqldeveloper连接),我更新这个表(或从中删除一行)并提交更新

在那之后,我通过代码查询表,但我没有看到更新的结果,我一直看到旧的值。我重复我的测试,结果总是以旧值返回

我停止运行程序,重新启动它,不做任何更改,重复测试后,我看到更新的值

怎么回事?我没有设置任何显式缓存机制,查询数据库的代码非常简单。是否存在任何默认缓存?我如何保证总是看到最新的值,无论哪个会话更改了它们

编辑:一开始我没有提到一件事:当这件事出现时,我的第一个想法显然是“哦,我忘了提交”,然后又提交了。没有变化。在本地机器上用代码运行测试,看到新值。在服务器上运行,没有看到


共 (1) 个答案

  1. # 1 楼答案

    只有在提交更改时才会发生更改。在你这么做之前,你看不到变化。之后你可以看到变化