当前位置: 首页 > 面试题库 >

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

汲昊空
2023-03-14
问题内容

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

因此,我有一个 Main 类,其中包含 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)

因此,我记得在其他与此数据库一起使用的应用程序中,有必要设置时区或类似的内容(但现在我无法访问这些应用程序)。

那么,如何解决此问题?我可以通过编程方式设置连接的时区吗?

特纳克斯


问题答案:

在尝试连接之前编写以下代码:

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



 类似资料:
  • 有人知道为什么第一个查询会导致抛出此错误,而第二个查询会起作用吗? ORA-01882:未找到时区区域01882。00000-“未找到时区区域%s” > 导致错误:在时区选择系统标记(SELECT t.TIME_ZONE从SOME_TABLEt WHERE t.TIME_ZONE='美国/丹佛'和ROWNUM=1)从Dual 正确工作:选择时区的系统标记(选择美国/丹佛从SOME_TABLEt哪里

  • 我想在我的web应用程序中工作在同一时区,我尝试使用de时区默认函数moment.tz.setDefault(“Europe/Madrid”);日期转换(json格式)不正确,默认为一天 http://plnkr.co/edit/xsughtdlufxugcjrwiz?p=preview 谢谢

  • 问题内容: 我已经从a 解析了一个,但是它将本地时区设置为对象的时区。 时区没有指定从中解析。我想设置对象的特定时区。 我怎样才能做到这一点? 问题答案: 使用DateFormat。例如,

  • 我使用API条连接OAuth参考(https://stripe.com/docs/connect/standard-accounts) 重定向用户的链接是:https://connect.stripe.com/oauth/authorize?response_type=code 如何翻译此页面?我尝试在url:但不起作用。我在留档中找不到任何东西谢谢

  • 我在symfony 2.5中的区域设置路由遇到问题。假设我的默认语言是英语。我的示例路由是/user/register/。如果我要求它没有任何语言环境,它应该出现在英文翻译。如果我使用区域设置(例如/fr/user/register/)请求它,它应该与它一起出现。这可以通过以下方式完成: 现在我必须回答以下问题: 我如何简单地避免用户可以使用默认语言作为区域设置来调用路由?在我的示例中,英语是默认