- PR -

コネクション作成

投稿者投稿内容
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-02-03 13:33
registerDriver は Class.forName したタイミングでドライバクラスのスタティックイニシャライザが行いますので明示的に行う必要はありません。
SJ0392
ベテラン
会議室デビュー日: 2004/02/05
投稿数: 62
お住まい・勤務地: 神奈川・横浜
投稿日時: 2005-02-03 22:06
J2SE1.4 の DriverManager についてのAPIドキュメントを見ると(以下長文コピーですが)

上部クラス説明欄に Class.forName() の記述があり、「ロード」という言葉が使われています。
コード:
 A program can also explicitly load JDBC drivers at any time.
 For example, the my.sql.Driver is loaded with the following statement: 

 Class.forName("my.sql.Driver");

 プログラムは、いつでも JDBC ドライバをロードすることができます。
 たとえば、次の文で my.sql.Driver がロードされます。 

  Class.forName("my.sql.Driver");



registerDriver() のメソッド説明欄には「ロード」と「登録」という言葉が使われています。
コード:
 Registers the given driver with the DriverManager.
 A newly-loaded driver class should call the method registerDriver to make itself known to the DriverManager. 

 Parameters:
  driver - the new JDBC Driver that is to be registered with the DriverManager 

 指定されたドライバを DriverManager に登録します。
 新しくロードされるドライバクラスは registerDriver メソッドを呼び出し、
 それを DriverManager に通知しなければなりません。 

 パラメータ: 
  driver - DriverManager に登録される新しい JDBC Driver 



上記から推測し「ロードと登録は別々の意味だから Class.forName() したら registerDriver() も必須なのだろう」と思ってました。
ろくに調査もせずJDBC使っていた事になりますね。

何年やってもJavaって奥が深いと思いつつ、インギさんに感謝。
ありがとうございます。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-02-04 02:20
#ちょっと当初の議論からはずれていますが一言だけ
>上記から推測し「ロードと登録は別々の意味だから Class.forName() したら registerDriver() も必須なのだ
>ろう」と思ってました。
そうそう。Class.forName() でドライバが登録されるのはちょっと不思議ですよね。
私も良く理解できず、どっかのドライバのソースを見ました。そこで初めて static{}ブロックの構文を覚えたんですが
かず
会議室デビュー日: 2005/01/31
投稿数: 8
お住まい・勤務地: 東京(出張)
投稿日時: 2005-02-10 09:41
みなさん、ご返答ありがとうございます。
返答が遅れまして申し訳ありません。

この件、解決しました。
こちらのVAN環境が原因で、接続するときに遮断されていたようです。
別セグメントにある全く同じオラクル環境へは接続ができました。
しょうもないことでみなさんへ質問してしまい、申し訳ありませんでした。
また、ありがとうございました。
いろいろと勉強になりました。

>Windows XP SP2 などのクライアント側のファイウォールが影響しているかもしれませんね。
クライアント環境に、ファイヤフォールは入っていません。また、クライアントOSは、Windows2000なので、この件は原因ではないです。

>registerDriver()
この記述を追加してやってみましたが、結果は同じでした。
C
会議室デビュー日: 2003/11/07
投稿数: 1
投稿日時: 2006-05-06 05:20
引用:

Clusterさんの書き込み (2005-02-03 00:27) より:
この手の話題でよくあるのが、オラクルのSIDとSQL*NETのローカルネットサービス名を混同しているケースです。

# ちなみに、"jdbc:oracle:thin:@xx.xx.xxx.xxx:1521:ORCL" の一番最後に
# ついてるのはSID、SQL*PLUSで指定するのはネットサービス名

もし私の勘繰りすぎなら、ごめんなさい。>かずさん



とおりすがりのものです。
この方法で、同じ現象が解決できました。
(ネットサービス名ではなくSIDを記述)
ありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)