gpt4 book ai didi

java - 如何为 JDBC 连接设置时区区域并避免找不到 SqlException 时区区域?

转载 作者:行者123 更新时间:2023-12-01 14:08:39 31 4
gpt4 key购买 nike

我在尝试创建 时遇到以下问题连接 对象来处理来自命令行 Java 应用程序和 Oracle 数据库的连接。

所以我有一个 包含 的类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

我得到这个异常(exception):
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

最佳答案

在尝试连接之前写下这个:

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 驱动程序版本。

关于java - 如何为 JDBC 连接设置时区区域并避免找不到 SqlException 时区区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28452513/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com