2015-02-11 157 views
1

我尝试创建一个连接对象来处理从命令行Java应用程序和Oracle数据库的连接时遇到以下问题。如何为JDBC Connection设置时区并避免找不到SqlException时区区域?

所以我有一个主要类,包含的main()方法,这一个:

import java.sql.*; 
import oracle.jdbc.OracleDriver; 

public class Main { 

    public static void main(String[] args) { 
     System.out.println("Hello World !!!"); 

     String partitaIVA = args[0]; 
     String nomePDF = args[1]; 

     Connection conn = null; 
     Statement stmt = null; 

     try { 
      Class.forName ("oracle.jdbc.OracleDriver"); 
      // Step 1: Allocate a database "Connection" object 
      conn = DriverManager.getConnection("jdbc:oracle:thin:@XXX.XXX.XXX.XXX:1521:eme1", "myUserName", "myPswd"); // Oracle DB 

     } catch(SQLException ex) { 
      ex.printStackTrace(); 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. 
     } 
    } 
} 

的问题是,当我尝试执行该指令:

conn = DriverManager.getConnection("jdbc:oracle:thin:@XXX.XXX.XXX.XXX:1521:eme1", "myUserName", "myPswd"); // Oracle DB 

我得到这个例外:

java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1 
ORA-01882: timezone region not found 

    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450) 
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:392) 
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:385) 
    at oracle.jdbc.driver.T4CTTIfun.processError(T4CTTIfun.java:1018) 
    at oracle.jdbc.driver.T4CTTIoauthenticate.processError(T4CTTIoauthenticate.java:497) 
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:522) 
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:257) 
    at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:433) 
    at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:950) 
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:639) 
    at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:662) 
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32) 
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:560) 
    at java.sql.DriverManager.getConnection(DriverManager.java:582) 
    at java.sql.DriverManager.getConnection(DriverManager.java:185) 
    at Main.main(Main.java:21) 

所以,我记得在其他一些使用这个数据库的应用程序中,有必要设置时区或类似的东西(但现在我无法访问这些应用程序)。

那么,我该如何解决这个问题?我可以通过编程设置我的Connection的时区吗?

TNX

回答

6

写您的连接尝试之前:

TimeZone timeZone = TimeZone.getTimeZone("yourTimeZone"); // e.g. "Europe/Rome" 
TimeZone.setDefault(timeZone); 

所以整个代码将是:

try { 
    TimeZone timeZone = TimeZone.getTimeZone("yourTimeZone"); 
    TimeZone.setDefault(timeZone); 
    Class.forName("oracle.jdbc.OracleDriver"); 
    conn = DriverManager.getConnection("connStr", "myUserName", "myPswd"); 
    ... 

如果这不起作用,该问题可能是一个无效的JDBC驱动版本。

+0

现在我试试,你能说我需要导入什么包才能使用TimeZone对象吗? – AndreaNobili 2015-02-11 11:03:19

+1

java.util.TimeZone http://docs.oracle.com/javase/7/docs/api/java/util/TimeZone.html – meskobalazs 2015-02-11 11:03:44