2015-02-11 89 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