如何设置JDBC连接的时区区域并避免找不到SqlException时区区域?
我在尝试创建一个 对象来处理来自命令行Java应用程序和Oracle数据库的连接时遇到以下问题。
因此,我有一个 类,其中包含 方法,这是一个:
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 1ORA-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)
因此,我记得在其他与此数据库一起使用的应用程序中,有必要设置时区或类似的内容(但现在我无法访问这些应用程序)。
那么,如何解决此问题?我可以通过编程方式设置连接的时区吗?
特纳克斯
回答:
在尝试连接之前编写以下代码:
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驱动程序版本。
以上是 如何设置JDBC连接的时区区域并避免找不到SqlException时区区域? 的全部内容, 来源链接: utcz.com/qa/415539.html








