- - PR -
JDeveloperでJDBC,JSPのサンプルでエラー
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-12-08 22:44
いつもお世話になっております。
2,3年ほど前に雑誌を参考に作成したプログラムなんですが、訳あって EclipseでなくJDeveloperで動かしてみました。JDBCを使ってSELECTするだけの プログラムは動作するのですが、同じ手法でJSPで動かそうとすると、エラーが 発生してしまいます。何が間違っているのかを教えていただければ有り難いのですが。 環境: WindowsXP Pro JDeveloper StudioEdition 10.1.3.1.0.3984 Oracle Database 10g Express Edition JDBC only のソース(正常に動作します) import java.sql.*; public class TestJDBC2 { public static void main(String[] args) throws SQLException, ClassNotFoundException { // Connectionの作成 Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:oci8:@XE", "user", "passwd"); // Statement の作成 Statement stmt = conn.createStatement(); // Resultset の作成 ResultSet rset = stmt.executeQuery("select * from DRIVINGSCHOOL_OFFICE"); // データの表示 while (rset.next()) System.out.println(rset.getString(1) + ":" + rset.getLong(2)); rset.close(); conn.close(); } } JSP & JDBCのソース(一部) <%@ page import="java.sql.*"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"/> <title>OfficeList</title> </head> <body><% // Connectionの作成 Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:oci:@XE", "user", "passwd"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM DRIVINGSCHOOL_OFFICE"); %><center> このページを実行させると、次のようなエラーが表示されます。 500 Internal Server Error java.lang.UnsatisfiedLinkError: t2cGetCharSet at oracle.jdbc.driver.T2CConnection.t2cGetCharSet(Native Method) at oracle.jdbc.driver.T2CConnection.getCharSetIds(T2CConnection.java:2957) at oracle.jdbc.driver.T2CConnection.logon(T2CConnection.java:320) at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:430) at oracle.jdbc.driver.T2CConnection.<init>(T2CConnection.java:142) at oracle.jdbc.driver.T2CDriverExtension.getConnection(T2CDriverExtension.java:79) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:608) at java.sql.DriverManager.getConnection(DriverManager.java:525) at java.sql.DriverManager.getConnection(DriverManager.java:171) at _OfficeList._jspService(_OfficeList.java:55) [/OfficeList.jsp] --- 以下略 --- JDBC onlyのときと、JDBC & JSP のときの違いは、JSPにしたことと、 プロジェクト・プロパティでライブラリの指定が異なっていることくらいしか わかりませんでした。 JDBC onlyのときのライブラリ指定 Ojdbc14_g.jar Oracle JDBC JDBC & JSPの時のライブラリ指定 Oracle JDBC JSP Runtime ちなみに、JDBC & JSP の方のライブラリの指定を Ojdbc14_g.jar Oracle JDBC JSP Runtime とすると、以下のようなエラーが表示されます。 500 Internal Server Error java.lang.IllegalAccessError: tried to access class oracle.jdbc.driver.OracleDriverExtension from class oracle.jdbc.driver.OracleDriver at oracle.jdbc.driver.OracleDriver.<init>(OracleDriver.java:403) at oracle.jdbc.driver.OracleDriver.<clinit>(OracleDriver.java:470) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:164) at _OfficeList._jspService(_OfficeList.java:54) [/OfficeList.jsp] ここで行き詰まってしまっています。 どなたかご助言をいただけないでしょうか? | ||||
|
投稿日時: 2006-12-09 01:57
どこまで調べて、何がわからないのでしょう?
UnsatisfiedLinkError が何を意味するのか分からなければGoogleとかで調べてみましょう。 なにか心当たりありませんか? [ メッセージ編集済み 編集者: インギ 編集日時 2006-12-09 01:57 ] | ||||
|
投稿日時: 2006-12-09 04:09
お世話になります。
Googleで以下のスレッドは調べてみました。 http://otn.oracle.co.jp/cgi-bin/non/msgview_r.cgi?communityid=otn-901233&bbsid=1&no=7118&view=9 ここででてくる clsses12.zip は、Oracleのサイトで調べてみると、 http://www.oracle.com/technology/tech/java/sqlj_jdbc/htdocs/jdbc_faq.htm What are all of these files for? There are a large number of classes files that are part of the Oracle JDBC installation. classes12.jar Classes for the Thin and OCI drivers when using a Java 1.2 or 1.3 VM. classes12.zip Same as classes12.jar except in zip format. This file will almost certainly not be available in future releases. You should use classes12.jar instead. classes12_g.jar Same as classes12.jar except compiled with the -g option to include debugging information and with Oracle JDBC logging included. ojdbc14.jar Same as classes12.jar except for use with Java 1.4 VMs. Beginning with this file, Oracle JDBC classes files will be named ojdcbXX.jar, where XX is the Java version number. The classes12 files will not be renamed. We will not provide zip files for Java 1.4 and beyond. ojdbc14_g.jar Same as ojdbc14.jar except compiled with the -g option to include debugging information and with java.util.logging calls included. とありましたが、JDeveloperに付属のJDKを使っているのだから大丈夫だろうということで、 それ以上調べていませんでした。 今JDeveloperのバージョン情報を見てみると、「Java(TM)プラットホーム 1.5.0.06」 とありました。 今 java.exe を検索してみると、 ./oracle/product/10.2.0/client_1/jdk/bin/java.exe ./oracle/product/10.2.0/client_1/jdk/jre/bin/java.exe ./program files/borland/java/sun1.5.0_03/bin/java.exe ./program files/jdeveloper/jdk/bin/java.exe ./program files/jdeveloper/jdk/jre/bin/java.exe の5つが見つかりましたが、環境変数PATHを見ると、 C:\\oraclexe\\app\\oracle\\product\\10.2.0\\server\\bin; C:\\XEClient\\bin; C:\\oracle\\product\\10.2.0\\client_1\\bin; その他もろもろ となっており、どのJAVA.EXEにもパスは通っていませんでした。 (cmd.exeでjava -version と打ってみましたが、エラーになりました) と、ここまでです。 昼からまた調べてみます。ありがとうございました。 | ||||
|
投稿日時: 2006-12-09 04:32
UnsatisfiedLinkError の意味は理解できたでしょうか?
あと、Thin ドライバをつかっているのか、OCI ドライバを使っているのかは理解できているでしょうか? 前者は Type4 ドライバで、後者は Type2 ドライバです。 http://www.google.com/search?client=safari&rls=ja-jp&q=ociドライバ+path+type2&ie=UTF-8&oe=UTF-8 Java.exe がパスに通っているかどうかは関係ないと思います。アプリケーションサーバが起動できているわけですから、Java 自体は動いているわけですよね? [ メッセージ編集済み 編集者: インギ 編集日時 2006-12-09 04:34 ] | ||||
|
投稿日時: 2006-12-09 17:11
お世話になっております。
まだ解決できないでいます。 UnsatisfiedLinkErrorについては、 http://java.sun.com/j2se/1.3/ja/docs/ja/api/java/lang/UnsatisfiedLinkError.html を見てみましたが、結局指定しているライブラリに関数がないというだけのことですよね。 タイプ2とタイプ4について http://www.atmarkit.co.jp/fjava/rensai/jdbc01/jdbc01.html を見てみたところ、タイプ2ではOracleクライアントのインストールが必要とありました。 ですが、OracleXEUniv.exeをインストールした後でOracleXEClient.exeもインストール しているのですが、この現象におちいっています。 OCIとTHINとの違いですが、THINはSIDを指定しなければならないのに、デフォルトの SID名がわからないので、サービス名指定できるOCIを使っています。 C:\\oraclexe\\app\\oracle\\product\\10.2.0\\server\\NETWORK\\ADMIN\\tnsnames.ora THINを使ってみようかと考えていますが、Googleで調べても、デフォルトのSID名を 調べる方法とか、または、指定する方法とかを記述しているサイトがわからないので、 後回しになっています。 ちなみに、listener.oraは以下のようになっています。 SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = C:\\oraclexe\\app\\oracle\\product\\10.2.0\\server) (PROGRAM = extproc) ) (SID_DESC = (SID_NAME = CLRExtProc) (ORACLE_HOME = C:\\oraclexe\\app\\oracle\\product\\10.2.0\\server) (PROGRAM = extproc) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE)) (ADDRESS = (PROTOCOL = TCP)(HOST = xxxx-xxx)(PORT = 1521)) ) ) DEFAULT_SERVICE_LISTENER = (XE) なにかお気づきの点があればお教えください。お願いします。 | ||||
|
投稿日時: 2006-12-09 17:55
>を見てみましたが、結局指定しているライブラリに関数がないというだけのことですよね。
またはライブラリが指定されていない、ということも考えられます。 どこに指定していますか?またバージョンはあっていますか? | ||||
|
投稿日時: 2006-12-09 19:18
thinとociドライバの使い分けはそういった所ではないです。 JDeveloperにOCIのライブラリが含まれていたかは確認していませんが、 SQL/Plusで接続できる(もしくはそれと同等な)構成になっている必要があります。 とりあえず、既存プログラムを試すだけであればthinドライバを使いましょう。 接続情報はtnsnames.oraに書いてあるので、SIDや接続先もわかるはずですし。 | ||||
|
投稿日時: 2006-12-26 20:48
なんとか動作させることができました。
Thinで指定するSIDがわからなかったので、調べたところ、レジストリに SIDが書かれていることがわかったので、それを指定して、以下のようにして 接続すると、接続できました。 Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:XE", "user", "passwd"); 結局、サービス名やSIDがわかっていなかったために、ずいぶんと悩んでしまいましたが、 皆さんのご助力のおかげで(少しずつですが)前に進めそうです。 ありがとうございました。 |
1