Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

JAVA(ORACLEXE)接続不可の対策について教えてください。

解決したいこと

oracleXE にJAVAから接続したいです。
解決方法を教えて下さい。
※本来はMYBATISのジェネレータをテストする予定だったのですがエラーが発生しよくわからないので
ソースで接続する単純なものを作成してみたところ接続自体うまくいっていないようでした。
XEはなにかソースで操作する場合特別なドライバーがいるのでしょうか?

--環境
■Spring Tool Suite 4
Version: 4.10.0.RELEASE
Build Id: 202103111225
■OracleXE184_Win64
■ドライバー
 ojdbc8.jar
■JAVA
 jdk1.8-171
■接続確認をしたORACEL SQL DEVELOPER
Java(TM)プラットフォーム 1.8.0_291
Oracle IDE 21.2.1.204.1703
■SQLPLUSのコマンドも正常に接続できています。
■リスナーのサービスの起動も正常に起動していることを確認しました。

--Oracleの接続文字列の部分は

発生している問題・エラー

java.sql.SQLRecoverableException: IOエラー: The Network Adapter could not establish the connection
at ojdbc8/oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:801)
at ojdbc8/oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:782)
at ojdbc8/oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:39)
at ojdbc8/oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:704)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
at oracleXEtest.start.main(start.java:14)
Caused by: oracle.net.ns.NetException: The Network Adapter could not establish the connection
at ojdbc8/oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:569)
at ojdbc8/oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:521)
at ojdbc8/oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:660)
at ojdbc8/oracle.net.ns.NSProtocol.connect(NSProtocol.java:287)
at ojdbc8/oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1481)
at ojdbc8/oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:540)
... 6 more
Caused by: java.io.IOException: Connection refused: connect, socket connect lapse 2040 ms. /0:0:0:0:0:0:0:1 1512 0 1 true
at ojdbc8/oracle.net.nt.TcpNTAdapter.connect(TcpNTAdapter.java:229)
at ojdbc8/oracle.net.nt.ConnOption.connect(ConnOption.java:172)
at ojdbc8/oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:508)
... 11 more
Caused by: java.net.ConnectException: Connection refused: connect
at java.base/sun.nio.ch.Net.connect0(Native Method)
at java.base/sun.nio.ch.Net.connect(Net.java:574)
at java.base/sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:784)
at java.base/java.nio.channels.SocketChannel.open(SocketChannel.java:224)
at ojdbc8/oracle.net.nt.TimeoutSocketChannel.connect(TimeoutSocketChannel.java:108)
at ojdbc8/oracle.net.nt.TimeoutSocketChannel.(TimeoutSocketChannel.java:86)
at ojdbc8/oracle.net.nt.TcpNTAdapter.connect(TcpNTAdapter.java:188)

該当するソースコード

package oracleXEtest;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class start {
public static void main(String... args) {

    String url = "jdbc:oracle:thin:@localhost:1512/SYSDBA";
    String user = "sys";
    String pass = "pass";
    try (Connection con = DriverManager.getConnection(url, user, pass);
            Statement stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery("select * from table1");) {

        while (rs.next()) {
            System.out.println(rs.getInt("COLUMN1"));
        }
        // 登録実行
        stmt.execute("insert into table1 values ('234' ");
        ResultSet rs2 = stmt.executeQuery("select * from table1");
        while (rs2.next()) {
            System.out.println(rs2.getString("COLUMN1"));
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

}

}

自分で試したこと

OracleXE自体がSQLPlusで接続可能であること
Oracleの接続ツールDeveloperで接続可能であることを確認しました。
Javaの単純な接続のソースを記載しましたが接続エラーになり接続できません。
MyBatisのジェネレータの設定を行いSpringでビルドを行いましたがソースで接続をしようとした時と同じエラーが発生しました。

0

2Answer

接続文字列を下記XEのサービス名入りにしたところなんかメッセージが変わりましたが、
どこが出しているものなのかちょっとわからないです。XEつけてみましたが、
変わりませんでした。
String url = "jdbc:oracle:thin:@localhost:1521:XE";

java.sql.SQLException: ORA-28009: SYSでの接続はSYSDBAまたはSYSOPERで行う必要があります

at ojdbc8/oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:494)
at ojdbc8/oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:441)
at ojdbc8/oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:436)
at ojdbc8/oracle.jdbc.driver.T4CTTIfun.processError(T4CTTIfun.java:1027)
at ojdbc8/oracle.jdbc.driver.T4CTTIoauthenticate.processError(T4CTTIoauthenticate.java:551)
at ojdbc8/oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:537)
at ojdbc8/oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:255)
at ojdbc8/oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:500)
at ojdbc8/oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:1280)
at ojdbc8/oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:690)
at ojdbc8/oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:782)
at ojdbc8/oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:39)
at ojdbc8/oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:704)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
at oracleXEtest.start.main(start.java:15)
0Like

urlの値は、回答の方へ書かれている下記のもので問題ないと思います。

String url = "jdbc:oracle:thin:@localhost:1521:XE";

恐らくuserを下記のように変更すれば、イケルのではないかと思います。

-   String user = "sys";
+   String user = "sys as sysdba";

特にSYSDBAで接続する必要が無いのであれば、別途ユーザーを作成した方が良いと思います。

0Like

Comments

  1. ありがとうございます。
    接続できました。
    XEの接続方法書かれておらず不親切でしたが、ユーザー名にasで接続先変更するってことが必要だったのですね!!

Your answer might help someone💌