Как установить регион часового пояса для соединения JDBC и избежать того, чтобы часовой пояс SqlException не был найден?

1

У меня есть следующая проблема с попыткой создать объект 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)

Поэтому я помню, что в некоторых других приложениях, которые работают с этой БД, необходимо установить часовой пояс или что-то вроде этого (но теперь я не могу получить доступ к этим приложениям).

Итак, как я могу исправить эту проблему? Можно ли программно установить часовой пояс для моего подключения?

Tnx

Теги:
connection
jdbc
sqlexception

1 ответ

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?
  • 1
    java.util.TimeZone docs.oracle.com/javase/7/docs/api/java/util/TimeZone.html
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню