Как подключиться к Oracle базе данных с S SH в IntelliJ IDEA - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь настроить источник данных, используя S SH для доступа к базе данных из IntelliJ вне кампуса. Конфигурация такая, как показано на скриншотах, и я получил

[08006] [17002] Ошибка ввода-вывода: получен минус один при вызове чтения, ошибка соединения 30003 мс, ошибка аутентификации 0 мс. oracle. net .ns.NetException: Получен минус один из вызова чтения.

Фактически мне удалось подключиться к БД с помощью loginProxy() и loginDB() в программе Java. После запуска кода я знал, что jdbcPort должен быть динамически c, и я предполагаю, что это также должно быть заполнено в поле «Порт» на вкладке «Общие» в окне конфигурации «Источник данных и драйверы».


Итак, возникает проблема, как я могу настроить ее, если порт, который нужно заполнить, это DYNAMI C? Или я что-то не так понял, чтобы на самом деле был другой подход?

Дополнительный вопрос: String URL = "jdbc:oracle:thin:@" + jdbcHost + ":" + jdbcPort + "/" + database; Какой формат URL здесь используется? Он не похож на SID, Service Name или TNS, но он работает ... и забавно, что когда я заменяю "/" на ":", который соответствует формату SID, он больше не работает. ..

    /**
     * Login the proxy. Do not change this function.
     * 
     * @return boolean
     */
    public boolean loginProxy() {
        if (getYESorNO("Using ssh tunnel or not?")) { // if using ssh tunnel
            String[] namePwd = getUsernamePassword("Login cs lab computer");
            String sshUser = namePwd[0];
            String sshPwd = namePwd[1];
            try {
                proxySession = new JSch().getSession(sshUser, proxyHost, proxyPort);
                proxySession.setPassword(sshPwd);
                Properties config = new Properties();
                config.put("StrictHostKeyChecking", "no");
                proxySession.setConfig(config);
                proxySession.connect();
                proxySession.setPortForwardingL(forwardHost, 0, databaseHost, databasePort);
                forwardPort = Integer.parseInt(proxySession.getPortForwardingL()[0].split(":")[0]);
                // ? forwardPort is set here, seems to be dynamic...
            } catch (JSchException e) {
                e.printStackTrace();
                return false;
            }
            jdbcHost = forwardHost;  // ? this is used in case of SSH connection, which is "localhost"
            jdbcPort = forwardPort;  // ? this is used in case of SSH connection
        } else {
            jdbcHost = databaseHost;
            jdbcPort = databasePort;
        }
        return true;
    }
    /**
     * Login the oracle system. Change this function under instruction.
     * 
     * @return boolean
     */
    public boolean loginDB() {
        String username = "myDBUsername";
        String password = "myDBPassword";

        /* Do not change the code below */

        String URL = "jdbc:oracle:thin:@" + jdbcHost + ":" + jdbcPort + "/" + database;

        try {
            System.out.println("Logging " + URL + " ...");
            conn = DriverManager.getConnection(URL, username, password);
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }
    }

enter image description here

SSH/SSL - Data Source and Drivers - IntelliJ IDEA

1 Ответ

0 голосов
/ 10 апреля 2020

На вкладке «Общие» необходимо указать реальное имя хоста и порт сервера БД, а не localhost. Если на следующей вкладке настроен туннель S SH, все соединения будут выполнены автоматически.

...