• 締切済み

jdbc:oracle:thinでSSLを使用する方法について

java.sql.SQLException: I/O例外です。: The Network Adapter could not establish the connectionというエラーが発生します。 ソースは以下です、どこが間違っているかわかりません。 import java.sql.*; import java.util.*; public class TestSSL { public static void main(String[] argv) throws Exception { DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); Properties prop = new Properties(); prop.setProperty("user", "scott"); prop.setProperty("password", "tiger"); // THIS DOES NOT WORK YET prop.setProperty("oracle.net.ssl_cipher_suites", "(ssl_rsa_export_with_rc4_40_md5, ssl_rsa_export_with_des40_cbc_sha)"); prop.setProperty("oracle.net.ssl_client_authentication", "false"); prop.setProperty("oracle.net.ssl_version", "3.0"); prop.setProperty("oracle.net.encryption_client", "REJECTED"); prop.setProperty("oracle.net.crypto_checksum_client", "REJECTED"); Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCPS)(HOST = localhost)(PORT = 2484))) (CONNECT_DATA = (SERVICE_NAME = XE)))", prop); Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery( "select 'Hello Thin driver SSL " + "tester '||USER||'!' result from dual"); while(rset.next()) System.out.println(rset.getString(1)); rset.close(); stmt.close(); conn.close(); } } ご教授よろしくお願いします。

  • Java
  • 回答数1
  • ありがとう数2

みんなの回答

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

まず oracle.jdbc.driver.OracleDriver は古いので oracle.jdbc.OracleDriver を使うのをお勧めするわ。 > どこが間違っているか スタックトレースを見れば 少なくとも原因となる箇所は絞れると思うけど。 とは言いつつもその例外はgetConnectionよね。 あやしいのはDBURLの記述かしら。 私そういう記述したことないわ。 いっつも jdbc:oracle:thin:@localhost:2484:XE こういう感じよ。 次に怪しいのはポートね。 2484であっているの? 他に間違いはなさそうだけど。

関連するQ&A

  • DBサーバ上でjdbcによるアクセス方法について

    Oracle JDBC Driverのロードを以下のように行おうとしました。 import java.sql.*; class JavaDataAccess01 { public static void main (String args[]) throws SQLException, ClassNotFoundException { // Oracle JDBC Driverのロード Class.forName("oracle.jdbc.driver.OracleDriver"); // Oracle10gに接続 Connection conn = DriverManager.getConnection ("jdbc:oracle:thin:@localhost:1521:ORCL", "test", "test"); // ステートメントを作成 Statement stmt = conn.createStatement(); // 問合せの実行 ResultSet rset = stmt.executeQuery("select brand_id,value from brand"); // 問合せ結果の表示 while ( rset.next() ) { // 列番号による指定 System.out.println(rset.getInt(1) + "\t" + rset.getString(2)); } // 結果セットをクローズ rset.close(); // ステートメントをクローズ stmt.close(); // 接続をクローズ conn.close(); } } コンパイル後実行すると以下のように例外がでます。 Exception in thread "main" java.lang.ClassNotFoundException: oracle.jdbc.driver. OracleDriver at java.net.URLClassLoader$1.run(URLClassLoader.java:199) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:187) at java.lang.ClassLoader.loadClass(ClassLoader.java:289) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274) at java.lang.ClassLoader.loadClass(ClassLoader.java:235) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:141) at JavaDataAccess01.main(JavaDataAccess01.java:11) ちなみにコンパイルして作成したクラスファイルはJavaDataAccess01です。使用しているDBはoracle10gです。環境設定もCLASSPATHにD:\oracle\product\10.2.0\db_1\jdbc\lib\classes12.zipを追加しているのですがどうにもうまくいきません。どなたか解決方法がわかる方、ご教授お願いします。

  • JavaでのOracle接続について(JDBC)

    はじめまして。 先週よりJavaの勉強を始めていまして 先日からDB接続(Oracle)をやっているのですが、Oracleに接続することが出来ません。色々なサイトからクラスパスが通っていないというエラーのようなのですが、プログラミング経験のある友人に聞いてもさっぱり原因が分かりません。また何度もインストールをやり直して同じです。以下に環境とソースを載せておきますので、もし何か解決のヒントになるような事がありましたら教えて下さい。 ●状況 (1)コンパイルは通るがjavaコマンドで実行をすると”Exception in thread "main" java.lang.ClassNotFoundException: oracle.jdbc.driveOracleDriver”が出てしまう。 (2)C:\oracle\ora92\jdbc\lib\ojdbc14.jarを環境変数→Pathへしっかりと通してあります。(setコマンドでも確認済みです) (3)C:\j2sdk1.4.1_02\jre\lib\extへojdbc14.jarをコピー (4)SQL PLUSからは接続出来る。 ●環境 クライアント:Win2000 DBサーバー:SQLサーバー(別マシンに環境構築) DB:Oralce9.2.0 JDK:1.4.1_02 import java.sql.*; class Employee { public static void main (String args []) throws SQLException,ClassNotFoundException { // Oracle JDBC Driverのロード Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection ("jdbc:oracle:thin:@ホスト名:1521:SID", "ID", "パスワード"); Statement stmt = conn.createStatement (); ResultSet rset = stmt.executeQuery ("SQL"); while (rset.next ()) System.out.println (rset.getString ("ISBN")); rset.close(); conn.close(); } } 以上です。何か足りない情報がありましたら教えて下さい。

  • 「Exception in thread "main" java.lang.NoClassDefFoundError: CUSTOMER」エラー

    Oracle9i R2にJDBCで接続してCUSTOMER表のレコード件数を調べる単純なJavaプログラムをつくろうとしています。 以下のソースをOracle端末上で実行すると「Exception in thread "main" java.lang.NoClassDefFoundError: CUSTOMER」というエラーメッセージが表示されます。 環境設定としてCLASSPATHにclasses12.zipのパスを通しました。 ------------------------------------------------- // JDBC APIのインポート import java.sql.*;class CUSTOMER { public static void main (String args[]) throws SQLException, ClassNotFoundException { // JDBC Driverの登録 Class.forName("oracle.jdbc.driver.OracleDriver"); // Oracle9iに接続 Connection conn = DriverManager.getConnection ("jdbc:oracle:thin@192.168.0.10:1521:testdb", "test", "test"); // ステートメントを作成 Statement stmt = conn.createStatement(); // 問い合わせの実行 ResultSet rset = stmt.executeQuery("SELECT COUNT(*) FROM CUSTOMER"); // 問い合わせ結果の表示 while ( rset.next() ) { // 列番号による指定 System.out.println(rset.getInt(1) + "\t" + rset.getString(2)); } // 結果セットをクローズ rset.close(); // ステートメントをクローズ stmt.close(); // 接続をクローズ conn.close(); } } ------------------------------------------------- 何かおわかりの方いらっしゃいましたら教えて下さい。宜しくお願いします。

    • ベストアンサー
    • Java
  • JDBC Connectionを開放し続ける方法

    JDBC経由でOracleに接続して、接続しっぱなしにしたいのですが、どうすればいいのかよくわかりません。 とりあえず正常終了するようなソースを書いてみました。このソースからconnectionをCloseしないように編集したいのですが、どうすればいいのかわかりません。 やりたいことはJDBCの複数同時Connectionを試したくて、このConnectionを維持したまま、何回かこのプログラムを実行すればいいかなと思っているんですが。 長くなりましたが、よろしくお願いします。 import java.sql.*; class Employee { public static void main (String args []) throws SQLException { // Load the Oracle JDBC driver DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); // Connect to the database // You must put a database name after the @ sign in the connection URL. // You can use either the fully specified SQL*net syntax or a short cut // syntax as <host>:<port>:<sid>. The example uses the short cut syntax. Connection conn = DriverManager.getConnection ("jdbc:oracle:thin:@HOST:PORT:SID", "scott", "tiger"); // Create a Statement Statement stmt = conn.createStatement (); // Select the ENAME column from the EMP table ResultSet rset = stmt.executeQuery ("select ENAME from EMP"); // Iterate through the result and print the employee names while (rset.next ()) System.out.println (rset.getString (1)); } }

    • ベストアンサー
    • Java
  • JavaでOracle9iのデータベースにアクセスしたいのですが

    JavaでOracleのデータベース上のテーブルにアクセスして、 ウェブブラウザで表示したいのですが、 参考として以下の文を入手はしたのですが、 それぞれの文の意味がよく分かりません。 import java.sql.*; public class JDBCExample { public static void main(String args[]) throws SQLException { DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); Connection conn= DriverManager.getConnection("jdbc:oracle:thin:@dlsun137:5521:sol1", "scott", "tiger"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("select ename, empno, sal from emp"); while(rs.next()){ String name= rs.getString(1); int number = rs.getInt(2); double salary = rs.getDouble(3); System.out.println(name+" "+number+" "+salary); } rs.close(); conn.close(); } } 見た感じ、テーブルそのものを表示する記述ではないような気がするのと、 仮にこのクラスを作ったとして、このクラスだけで望んだ結果を得られるのでしょうか? どなたか、よろしくお願いいたします!

    • ベストアンサー
    • Java
  • Oracle Database 10g Express Editionを使いたい

    と思いDLしてインストールして SQLPLUSで ユーザ:usr1 パスワード:psswd1 でOracleに入り SQL> CREATE TABLE "PROJECT" ( "ID" NUMBER NOT NULL ENABLE, "PJNAME" VARCHAR2(100) NOT NULL ENABLE, CONSTRAINT "PROJECT_PK" PRIMARY KEY ("ID") ENABLE ) / 2 3 4 5 6 表が作成されました。 SQL> describe project; 名前 NULL? 型 ----------------------------------------- -------- ---------------------------- ID NOT NULL NUMBER PJNAME NOT NULL VARCHAR2(100) SQL> とテーブルを作り以下のJavaアプリを作り実行しましたが 動きませんでした。getConnectionの引数の "jdbc:oracle:thin:@localhost:1521:ORCL" の中のORCLの部分に何を入れてよいのか分からなかったので 根拠なしにORCLを使ったのが悪かったと思います。 ORCLの部分には何を入れたらいいのでしょうか? package pack; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class JdbcTest { public static void main(String args[]) throws SQLException,ClassNotFoundException { Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","usr1","psswd1"); Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery("select ip,pjname from project"); while (rset.next()) { System.out.println(rset.getInt(1) + "\t" + rset.getString(2)); } rset.close(); stmt.close(); conn.close(); } } エラー:Exception in thread "main" java.sql.SQLException: Listener refused the connection with the following error: ORA-12505, TNS:listener does not currently know of SID given in connect descriptor The Connection descriptor used by the client was: localhost:1521:ORCL

    • ベストアンサー
    • Java
  • JDBC接続ができない

    いつもお世話になっております。 JSPでoracleに接続するプログラムがあるのですが、 接続先oracleの改修が行われ、ホスト・ポート・SIDが変更になったので 設定を変えてテスト接続したところ、以下のようなエラーが出力されます。 java.sql.SQLException: I/O例外です。: Bad packet type エラーは次の行で発生しています。 Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@(ホスト):(ポート):(SID)", "ユーザID", "パスワード"); 修正前の設定ではまったく同じコードで接続ができます。 このエラーについてご存知の方、どうかご教授ください。

    • ベストアンサー
    • Java
  • JDBCで複数のクラスファイルを作成しアクセスしようとしたときに起こる問題点

    Javaとデータベース(oracle)を連動させて、Statementなどを実行して値をとってこようとしています。1つのJavaファイル内にてコンパイル、実行はできたのですが、複数のJavaファイルに切り出したときにコンパイルはできるのですが、実行すると Exception in thread "main" java.lang.NullPointerException at DBAccess.Zenkenkensaku.zenkenkensaku(Zenkenkensaku.java:21) at DBAccess.JavaDataAccess.main(JavaDataAccess.java:19) と出てしまってできません。エラーメッセージを見る限り、ステートメントの作成がうまくできていない感じがするのですが、何がいけなかったのでしょうか、原因がわかりません。よろしくお願いします。下にそのファイルを書きます。 JavaDataAccess.java //DBにアクセスするクラスの切り出し package DBAccess; //JDBC APIをインポート import java.sql.*; //メイン class JavaDataAccess { public static void main (String args[]) throws SQLException, ClassNotFoundException { //接続の呼び出し ConnectClose connectclose1 = new ConnectClose(); connectclose1.Connect(); //全件検索の呼び出し Zenkenkensaku zenkenkensaku1 = new Zenkenkensaku(); zenkenkensaku1.zenkenkensaku(); //接続をクローズする呼び出し ConnectClose connectclose2 = new ConnectClose(); connectclose2.Close(); } } Zenkenkensaku.java //全件検索ファイル //パッケージ package DBAccess; //JDBC APIをインポート import java.sql.*; class Zenkenkensaku { //宣言と初期化 Connection conn = null; Statement stmt = null; ResultSet rset = null; //全件検索の内容 public void zenkenkensaku() throws SQLException { // ステートメントを作成 stmt = conn.createStatement(); //問合せの実行 rset = stmt.executeQuery("select 商品コード, 商品名, 単価 from 商品"); // 問合せ結果の表示 while( rset.next()){ //列番号による指定 System.out.println (rset.getInt(1) + "\t" + rset.getString(2) + "\t" + rset.getInt(3)); } } }

    • ベストアンサー
    • Java
  • JavaからOracleへの接続が出来たり出来なかったり(改

    いつもお世話になっています。よろしくお願いします。 問題は、同じソースなのに、タイミングによって Oracleに接続出来たり、出来なかったりすることです。 まずは、問題のソースを短くまとめたものを書きたいと思います。 public class Sql private static Statement stmt; private static Connection conn; public static void main(String args[]) { Sql banana = new Sql banana(); banana.openOracle(); // Oracleへ接続するメソッドです。 ・ ・リャクサレテルワァ*:.。..。.:*・゜(n;‘∀)η(略 ・ banana.closeOracle(); // Oracleを切断するメソッドです。 } /** * Oracleへ接続するメソッドです。 */ private void openOracle() throws SQLException, ClassNotFoundException{ Class.forName("oracle.jdbc.driver.OracleDriver"); conn = DriverManager.getConnection("jdbc:oracle:oci8:@sampledb","user5","user5"); stmt = conn.createStatement(); } /** * Oracleを切断するメソッドです。 */ private void closeOracle() throws SQLException, ClassNotFoundException{ stmt.close(); conn.close(); } } 環境としては、 JDK5.0と、 Oracle9i(Client)をインストールしています。 インストールしてから今日まで1週間ですが、このような現象は 初めて起こりました。 JavaからOracleのデータベースを操作するようになって 3日目ですが、今日までうまく接続出来てきました。 処理をメソッドに分けてみたのは、今日が初めてです。 しかし、同じソースで接続できたりできなかったりする というのは、どういう現象なのでしょうか。 同じような現象を経験された方、 Oracle接続にお詳しい方、 どうか、ご教授よろしくお願いします。 プログラミングも、質問させていただくことも初心者ですので、 何か足りない情報などございましたら、ご指摘ください。 よろしくお願いします。

    • ベストアンサー
    • Java
  • Oracle8i に接続しようと思うんですが、エラーが出ます。 その2

    2度目です。すみません。 先ほどの問題は解決できたのですが、今度は別のエラーがでてしまいます。 java.sql.SQLException: I/O例外です。: The Network Adapter could not establish th e connection at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:180) at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:222) at oracle.jdbc.dbaccess.DBError.throwSqlException ソースは以下のとおりで、Connection conn のところで、エラーが出ます。 public class DbTest{ // [ jdbc:oracle:thin:@ + "IP or コンピュータ名(NETBIOS名)" + ":" + ポート + ":" + "DB名" ] private static String DATABASE_URL = "jdbc:oracle:thin:@ksr01-d:1521:ksroracle"; private static String DATABASE_USER = "ksr"; private static String DATABASE_PASS = "ksr"; public static void main(String[] arg ){ System.out.println("STRAT"); try{ // JDBC ドライバの登録 DriverManager.registerDriver( new oracle.jdbc.driver.OracleDriver() ); String drName = "oracle.jdbc.driver.OracleDriver"; Connection conn = DriverManager.getConnection( DATABASE_URL, DATABASE_USER, DATABASE_PASS ); Oracle SQL*Plus を起動してから、実行しています. 事務所に、java の出来る人がいなく、oracle に詳しい人もいなく、上司が、絶対作れといってきて大変困っています。 誰かわかる人がいたら、教えてください。すみませんが,よろしくお願いします.

    • ベストアンサー
    • Java

専門家に質問してみよう