質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

2回答

5153閲覧

Java(サーブレット/JSP)で、Oracleデータベースに接続できません

vjusr

総合スコア5

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2020/02/18 08:59

編集2020/02/21 01:13
import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/Servlet25") public class Servlet25 extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String msg; try { Class.forName("oracle.jdbc.driver.OracleDriver"); msg = "ドライバのロードに成功しました<br>"; }catch (ClassNotFoundException e){ msg = "ドライバのロードに失敗しました<br>"; e.printStackTrace(); }catch (Exception e){ msg = "ドライバのロードに失敗しました2<br>"; } System.out.println("aaa"); System.out.println(msg); request.setAttribute("msg", msg); Connection conn = null; final String url = "jdbc:oracle://192.168.11.12:1521:ORCL"; final String user = "test"; final String password = "test8128617"; String err = ""; try { conn = DriverManager.getConnection(url, user, password); } catch (final SQLException e) { err = "データベースの接続に失敗しました。"; e.printStackTrace(); } request.setAttribute("err", err); String view = "WEB-INF/view/index.jsp"; RequestDispatcher dispatcher = request.getRequestDispatcher(view); dispatcher.forward(request, response); } }

e.printStackTrace()によるエラーを見ると、「ドライバのロードに成功しました<br>java.sql.SQLException: 無効なOracle URLが指定されました。」と表示されるため、JDBCドライバは正常にロードできているようです。
指定したデータベースのURLはおそらく正しいと思われるので原因がわからず困っている状態です。

データベースは起動しています。
JavaはEclipseで行っています。
OSはwindows10 Proです。

コンソール画面

ドライバのロードに成功しました<br>java.sql.SQLException: 無効なOracle URLが指定されました。 at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:447) at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677) at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228) at test.controller.testServlet.doGet(testServlet.java:53) at javax.servlet.http.HttpServlet.service(HttpServlet.java:634) at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:367) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1598) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:834)

公式サイト内のページから「Oracle Database 12c Release 1 (12.1.0.2) drivers」を選択し、このページから最上部の「Oracle Database 12.1.0.2 JDBC Driver & UCP Downloads」のJDBCドライバ(ojdbc-full.tar.gz)をダウンロードしました。
上記のJDBCドライバはthinドライバと書かれているのでthinドライバだと思われます。
データベースのバージョンは「11.2.0.2.0」なので、上記のドライバと対応しているようです(公式サイト)。
解凍して、「odjbc6.jar」「odjbc7.jar」「xdb6.jar」の3つを・・WebContent/WEB-INF/libに置きました。3つも置いたのは適切なjarファイルがどれなのか判断できなかったからです。
ただ公式サイトをよく見ると「odjbc6.jar」が対応しているようです。
また、解凍した中にまだ未使用のjarファイルが残っています(orai18n.jarとsimplefan.jar)。

また、以下のことも試しましたがだめでした。
final String url = "jdbc:oracle://192.168.11.12:1521:ORCLを以下に変更
final String url = "jdbc:oracle:thin://192.168.11.12:1521:ORCL"

URLの指定に「thin:」を追加した後のコンソール画面

ドライバのロードに成功しました<br> java.sql.SQLRecoverableException: IOエラー: The Network Adapter could not establish the connection at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:743) 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/java.sql.DriverManager.getConnection(DriverManager.java:677) at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228) at test.controller.testServlet.doGet(testServlet.java:53) at javax.servlet.http.HttpServlet.service(HttpServlet.java:634) at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:367) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1598) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:834) Caused by: oracle.net.ns.NetException: The Network Adapter could not establish the connection at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:470) at oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:506) at oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:595) at oracle.net.ns.NSProtocol.connect(NSProtocol.java:230) at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1452) at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:496) ... 30 more Caused by: java.net.ConnectException: Connection refused: connect at java.base/java.net.PlainSocketImpl.waitForConnect(Native Method) at java.base/java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:107) at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399) at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242) at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224) at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403) at java.base/java.net.Socket.connect(Socket.java:609) at oracle.net.nt.TcpNTAdapter.connect(TcpNTAdapter.java:161) at oracle.net.nt.ConnOption.connect(ConnOption.java:159) at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:428) ... 35 more

修正部分(URLの指定)※接続成功した書き方

修正後

final String url = "jdbc:oracle:thin:@192.168.11.12:1521:xe";

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/02/18 10:32

ociなのかthinなのかがひっす
vjusr

2020/02/19 00:52

ありがとうございます。 先程追記しました。 ociとthinとどちらが適切なのかについてはよくわかりませんでした。 ダウンロードしたものはthinのようですので、thinをURLの中で指定しましたがうまくいきませんでした。
Orlofsky

2020/02/19 02:00

JavaやJDBCは詳しくないですが、きになったのが、 >OSはwindows10です。 ... >公式サイト内のページから「Oracle Database 12c Release 1 (12.1.0.2) drivers」を選択 Oracle12.1 Database Client は Windows10 では動作保証されていないです。 Oracle12.2 Database Client なら Windows 10 x64 - Pro、EnterpriseおよびEducationエディション が動作保証されています。 回答のURLのリンクを見てもらえますか?
vjusr

2020/02/19 02:32

Oracle Clientは使っていない形でデータベースに接続しているので、「Oracle12.1 Database インストレーション・ガイド for Microsoft Windows ソフトウェア要件」のリンクを参照したのですが、Windows10(64bit)は動作保証されているようでした。 また、過去に同一のパソコンからデータベース接続が成功していましたので、Javaプログラム上に問題があるのではと予測しています。 接続に成功した後にEclipse、データベースソフトを再インストールし、接続に成功した当時のプログラムを誤って消して(←バックアップ取り忘れ)しまったのでゼロから書き直すなどすべてをやり直したという状況です。 説明不足で申し訳ありません。
Orlofsky

2020/02/19 02:46

Oracle® Database Clientインストレーション・ガイド 12cリリース1 (12.1) for Microsoft Windows https://docs.oracle.com/cd/E57425_01/121/NTCLI/toc.htm の ↓ 2.2.2 Oracle Database Clientの全般的なソフトウェア要件(Windows x64) https://docs.oracle.com/cd/E57425_01/121/NTCLI/pre_install.htm#CBHFBCID にWindows10 は載っていません。たまたま sqlplus が接続できても、再現しなかったり、ユーティリティが動かなかったり、JDBCがつながらなかったりしても、すべて自己責任です。オラクル社は一切感知しません。
Orlofsky

2020/02/19 03:18

これは >Oracle® Databaseインストレーション・ガイド 12cリリース1 (12.1) for Microsoft Windows ですから、 Oracle Database そのもののソフトウェア要件です。 正確なところはオラクル・サポートに確認されては?オラクルはサポート契約して曖昧なところも含めてオラクル・サポートに確認しながら開発することを前提としています。
vjusr

2020/02/20 01:09

おそらくサポート契約はしてないです。 プログラムではなく、利用環境やOracleデータベースの設定が原因になっている可能性が高いのでしょうか。 先程気づいたんですが、URLに「thin:」を付けたことでコンソールのエラーログが変わり、「java.sql.SQLRecoverableException: IOエラー: The Network Adapter could not establish the connection」というエラーに変わったようです。
Orlofsky

2020/02/20 04:38

エラーメッセージでググって解決しなければ、オラクル・サポートに問い合せます。 サポート契約することを拒否して破綻したシステムを何社も見聞きしています。頑張ってください。 個人的には ORA-600などオラクル・サポートにアラート・ログ、トレース・ファイル、ダンプファイル、インシデントファイル などを送って調べてもらわないと解決しないエラーが起きてもオラクル・サポートに問い合せできないが、自分たちで解決するように押し付けられそうになって断ったこともあります。爆笑
vjusr

2020/02/21 01:15

開発者のOracleでなければ解決できないようなエラーも起こるんですね。 私はデータベースもJavaも初学者なので今回は本当に何が何やらといった感じでした。 今回は学習目的の開発でしたが、本格的にデータベースの運用をするときはサポート契約も視野に入れたいと思います。
guest

回答2

0

ベストアンサー

無効なOracle URLが指定されました。

このエラーが出ている時点でurlが正しくはありません。

oci thin 等適切なドライバタイプの指定が必須ですがありません。

oracle jdbc driverのマニュアルにあるのでつなぎたい方式のurlに変えてください

JDBC URL

thin ドライバと判明したので追記

diff

1- final String url = "jdbc:oracle:thin://192.168.11.12:1521:ORCL"; 2+ final String url = "jdbc:oracle:thin://192.168.11.12:1521/ORCL";

とかは

まさかとはおもうが・・・

diff

1- final String url = "jdbc:oracle:thin://192.168.11.12:1521/ORCL"; 2+ final String url = "jdbc:oracle:thin://192.168.11.12:1521/XE";

投稿2020/02/18 10:43

編集2020/02/19 07:50
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

vjusr

2020/02/19 00:52

ありがとうございます。 先程追記しました。
vjusr

2020/02/19 06:56

ありがとうございます。 変更してみたところ、同様に「ドライバのロードに成功しました データベースの接続に失敗しました。 」になってしまいます。
vjusr

2020/02/20 00:03

追記拝見しました。 ありがとうございます。 xeに変更してみましたが同様の結果となりました。 URLのアドレスの数字が間違っているのでしょうか・・
退会済みユーザー

退会済みユーザー

2020/02/20 00:08

オラクル側のバージョン/エディション/設定など見ないとあとは何も言えないね
vjusr

2020/02/20 01:07

そうなんですね。 oracleのバージョンは「11.2.0.2.0」ですが、他の情報はよくわかりません。 先程気づいたんですが、「thin:」を付けたことでコンソールのエラーログが変わり、「java.sql.SQLRecoverableException: IOエラー: The Network Adapter could not establish the connection」というエラーに変わったようです。
退会済みユーザー

退会済みユーザー

2020/02/20 04:02

IPかポート、またはその両方が間違えてるって出てる部分はこちらではオラクルの設定を確認して、設定しろとしかいいようがないよ
vjusr

2020/02/21 01:16

何とか解決しました。 お騒がせしました。 //が不要で、@が足りなかったようです。 修正前の@なしのURLの書き方でも接続できているという記事がたくさんあったこともあり、徹底して調査しきれていなかったので反省しています。 thinやxeの指定も必須でしたので、@も含めた3点が不足していたということがわかりました。
guest

0

投稿2020/02/18 09:16

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/02/18 10:36

その前にoracle jdbc url の形式じゃないけどね
vjusr

2020/02/19 00:57

ありがとうございます。 データベース、JDBCのバージョンについては追記しました。 OSのバージョンは、教えていただいたページにあったリンク先のページを確認したところ、対応しているようです。 正直もう打つ手が思いつかない状況でかなり困っています。。
Orlofsky

2020/02/19 05:00

まさか、 >OSはwindows10です。 Windows 10 Home Premium ってオチじゃないですよね?
vjusr

2020/02/19 07:14

OSは確認したところ、Windows10 Proでした。
Orlofsky

2020/02/20 03:28

>Windows10 Proでした。 質問を直されては? できれば最初から書けた方が良いです。
vjusr

2020/02/20 03:34

了解です。 OSの情報を修正しました。
vjusr

2020/02/20 03:58

事情がありOracle Clientは使わず直接接続でやるという制約があるので、Oracle Clientは使えないと思われます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問