Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么从Oracle花费的时间不一致?_Java_Oracle - Fatal编程技术网

Java 为什么从Oracle花费的时间不一致?

Java 为什么从Oracle花费的时间不一致?,java,oracle,Java,Oracle,我正在编写一个java应用程序,它从Oracle获取UTC时间,然后查询表中是否有行与该时间匹配。如果没有结果,请再次使用UTC,以此类推 但有时时间会倒流,或者花1到2分钟,然后在正确的时间继续 这是所用UTC时间的日志: 15/03/2016 16:42:59 [INFO] Time (UTC): 21:42:25 {1} 15/03/2016 16:42:59 [INFO] Time (UTC): 21:42:25 {2} 15/03/2016 16:42:59 [INFO] T

我正在编写一个java应用程序,它从Oracle获取UTC时间,然后查询表中是否有行与该时间匹配。如果没有结果,请再次使用UTC,以此类推

但有时时间会倒流,或者花1到2分钟,然后在正确的时间继续

这是所用UTC时间的日志:

15/03/2016 16:42:59 [INFO]  Time (UTC): 21:42:25 {1} 
15/03/2016 16:42:59 [INFO]  Time (UTC): 21:42:25 {2} 
15/03/2016 16:42:59 [INFO]  Time (UTC): 21:42:25 {3} 
15/03/2016 16:42:59 [INFO]  Time (UTC): 21:42:25 {4} 
15/03/2016 16:42:59 [INFO]  Time (UTC): 21:42:25 {5} 
15/03/2016 16:43:00 [INFO]  Time (UTC): 21:44:12 {6} 
15/03/2016 16:43:00 [INFO]  Time (UTC): 21:42:26 {7} 
15/03/2016 16:43:00 [INFO]  Time (UTC): 21:42:26 {8} 
15/03/2016 16:43:00 [INFO]  Time (UTC): 21:42:26 {9} 
15/03/2016 16:43:00 [INFO]  Time (UTC): 21:42:26 {10} 
15/03/2016 16:43:00 [INFO]  Time (UTC): 21:42:26 {11} 
15/03/2016 16:43:01 [INFO]  Time (UTC): 21:42:27 {12} 
15/03/2016 16:43:01 [INFO]  Time (UTC): 21:42:27 {13} 
15/03/2016 16:43:01 [INFO]  Time (UTC): 21:42:27 {14} 
15/03/2016 16:43:01 [INFO]  Time (UTC): 21:42:27 {15} 
15/03/2016 16:43:01 [INFO]  Time (UTC): 21:42:27 {16} 
15/03/2016 16:43:01 [INFO]  Time (UTC): 21:42:27 {17} 
15/03/2016 16:43:02 [INFO]  Time (UTC): 21:42:28 {18} 
15/03/2016 16:43:02 [INFO]  Time (UTC): 21:42:28 {19} 
15/03/2016 16:43:02 [INFO]  Time (UTC): 21:42:28 {20} 
15/03/2016 16:43:02 [INFO]  Time (UTC): 21:42:28 {21} 
15/03/2016 16:43:02 [INFO]  Time (UTC): 21:42:28 {22} 
15/03/2016 16:43:02 [INFO]  Time (UTC): 21:42:28 {23} 
15/03/2016 16:43:03 [INFO]  Time (UTC): 21:44:15 {24} 
15/03/2016 16:43:03 [INFO]  Time (UTC): 21:44:15 {25} 
15/03/2016 16:43:03 [INFO]  Time (UTC): 21:44:15 {26} 
15/03/2016 16:43:03 [INFO]  Time (UTC): 21:44:15 {27} 
15/03/2016 16:43:03 [INFO]  Time (UTC): 21:44:16 {28} 
15/03/2016 16:43:04 [INFO]  Time (UTC): 21:44:16 {29} 
15/03/2016 16:43:04 [INFO]  Time (UTC): 21:42:30 {30} 
这是我代码的一部分:

int arraycounter = 0;
int index = 0;

while (arraycounter = 0)
{       
    Connection con = null;
    Statement stmt = null;
    ResultSet rs = null;

    String utc_time = "";

    String querytime = "select to_char(sys_extract_utc(systimestamp),'HH24:MI:SS') from dual";

    try {
        Class.forName("oracle.jdbc.driver.OracleDriver");
        con = DriverManager.getConnection("jdbc:oracle:thin:"+ConnectionString);
        stmt = con.createStatement();
        rs = stmt.executeQuery(querytime);

        while(rs.next()) {
            utc_time = rs.getString(1);
        }

    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        try {
            rs.close();
            stmt.close();
            con.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    String query = "select * from table where to_char(date, 'hh24:mi:ss') = '"+utc_time+"'";

    index++;
    logger.info("Time (UTC): "+ utc_time +" {"+(index)+"}");

    try {
        Class.forName("oracle.jdbc.driver.OracleDriver");
        con = DriverManager.getConnection("jdbc:oracle:thin:"+ConnectionString);
        stmt = con.createStatement();
        rs = stmt.executeQuery(querytime);

        while( rs.next() ){             

        //save the result into an arraylist
        arraycounter++;

        }

    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        try {
            rs.close();
            stmt.close();
            con.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }   
}   
为什么会这样?
是否有更好的方法使用UTC时间

我的Oracle DB在RAC上,实例的时间不同步。 我检查输入一个实例并检查时间,然后输入另一个实例并检查时间

要了解您是在什么情况下运行的,可以执行以下操作:

从v$instance中选择实例名称

为了连接到数据库的特定实例,还可以在连接描述符中指定特定实例的实例名称。如果您具有Oracle Real Application Clusters配置,则此功能非常有用。例如,以下连接描述符指定与sales.us.acme.com关联的sales1的实例名称

(DESCRIPTION= 
  (ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521))
  (CONNECT_DATA=
    (SERVICE_NAME=sales.us.acme.com)
    (INSTANCE_NAME=sales1)))

您可以在Oracle SQL Developer上指定,因为您的SID=sales1

我的Oracle DB位于RAC上,并且实例的时间不同步。 我检查输入一个实例并检查时间,然后输入另一个实例并检查时间

要了解您是在什么情况下运行的,可以执行以下操作:

从v$instance中选择实例名称

为了连接到数据库的特定实例,还可以在连接描述符中指定特定实例的实例名称。如果您具有Oracle Real Application Clusters配置,则此功能非常有用。例如,以下连接描述符指定与sales.us.acme.com关联的sales1的实例名称

(DESCRIPTION= 
  (ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521))
  (CONNECT_DATA=
    (SERVICE_NAME=sales.us.acme.com)
    (INSTANCE_NAME=sales1)))

您可以在Oracle SQL Developer上指定作为SID=sales1的数据库服务器是否与代码位于同一个框中?如果将
连接con
对象保持在循环之外,仍然会发生吗?不会。@biziclop数据库服务器是远程的。如果您在rac上,则一些查询在第一个实例上,其他查询在第二个实例上。如果实例具有不同的日期时间设置,则会得到不同的结果。调用您的DBA。不要从v$instance中选择instance\u name
返回实例名称,或者这是一个完全不同的东西?数据库服务器是否与代码位于同一个框中?如果将
连接con
对象保持在循环之外,仍然会发生吗?不会。@biziclop数据库服务器是远程的。如果您在rac上,则一些查询在第一个实例上,其他查询在第二个实例上。如果实例具有不同的日期时间设置,则会得到不同的结果。调用您的DBA。不要从v$instance中选择instance\u name返回实例名,或者这是完全不同的事情?