- - PR -
iBATISとOracle10gでSqlMapClient取得時にエラーとなる。
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-05-06 00:18
■問題
iBATISとOracle10gでSqlMapClient取得時にエラーとなる。 ------------------------------------------------------------ ■問題詳細 iBATISを使用してOracle10gからSqlMapClient取得時にエラーとなります。 iBATISを使用しない場合は、オラクルよりデータ取得まで可能なので、 設定誤りか環境の問題だと思っています。 ただのクラスパスの設定ミスであればいいのですが、原因がわからず困っています・・・。 どなたか原因がわかる方がいましたらご教授頂けると幸いです。 宜しくお願いします。 2008/05/05 23:14:46 com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl error 致命的: SimpleDataSource: Error while loading properties. Cause: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClassInternal(Unknown Source) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) at com.ibatis.common.resources.Resources.classForName(Resources.java:265) at com.ibatis.common.resources.Resources.instantiate(Resources.java:281) at com.ibatis.common.jdbc.SimpleDataSource.initialize(SimpleDataSource.java:199) at com.ibatis.common.jdbc.SimpleDataSource.<init>(SimpleDataSource.java:116) at com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory.initialize(SimpleDataSourceFactory.java:31) at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser$9.process(SqlMapConfigParser.java:347) at com.ibatis.common.xml.NodeletParser.processNodelet(NodeletParser.java:121) at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:105) at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:102) at com.ibatis.common.xml.NodeletParser.process(NodeletParser.java:102) at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:72) at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:51) at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConfigParser.java:86) at com.ibatis.sqlmap.client.SqlMapClientBuilder.buildSqlMapClient(SqlMapClientBuilder.java:63) at test.DBUtil.<clinit>(DBUtil.java:17) at test.TestMain.main(TestMain.java:17) ------------------------------------------------------------ ■環境 JDK:1.5.0_11 iBATIS:ibatis-2.3.0.677 DB:Oracle10g 10.2.0.3.0 JDBC:ojdbc14.jar Windows:Vista Eclipse:3.3.0 ------------------------------------------------------------ ■備考 ・iBATISを使用せずに、Javaプログラムから直接DB接続は可能 ・WindowsマシンからDBへSQLPlus接続は可能 ・システム環境変数でJDBC等にクラスパス設定をしていない(Eclipseで設定) ・こちらのサイトのiBATISサンプルでは動作しました(いろいろとバージョンが異なります) http://www.canetrash.jp/article/1938737.html ------------------------------------------------------------ ■iBATIS用のソースコード private static final SqlMapClient sqlMap; static { try { String resource = "SqlMapConfig.xml"; Reader reader = Resources.getResourceAsReader(resource); sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException( "Error Initializing DBUtil class. Cause:" + e); } } ------------------------------------------------------------ ■SqlMapConfig.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <sqlMapConfig> <properties resource="SqlMapConfig.properties"/> <transactionManager type="JDBC"> <dataSource type="SIMPLE"> <property name="JDBC.Driver" value="${driver}"/> <property name="JDBC.ConnectionURL" value="${url}"/> <property name="JDBC.Username" value="${username}"/> <property name="JDBC.Password" value="${password}"/> </dataSource> </transactionManager> <sqlMap resource="hogehoge.xml"/> </sqlMapConfig> ------------------------------------------------------------ | ||||
|
投稿日時: 2008-05-06 22:11
みたいなコードを書いて動きますか? 例外を見ると、oracle.jdbc.driver.OracleDriverというクラスが見つからないと言われています。 Eclipseで簡単なコードを書いてテストされていると思うのですが、 通常のJDBCでの接続に成功してiBatis経由で失敗するというのは、 説明が難しい感じがしますね。 簡単に言うと、自前でOracleに接続するときに、 Class.forName("oracle.jdbc.driver.OracleDriver")というコードを書いていると思いますが、 iBatis内部でも同じことをやって例外になっているのです。 解決になるか分かりませんが、直接Oracleへ接続するコードも載せてみてください。 | ||||
|
投稿日時: 2008-05-08 00:33
かつのりさん
返答ありがとうございます。 >new oracle.jdbc.driver.OracleDriver() 本コードを記述してもエラーとなるため、 直接DBへ接続するソースとの差分を見てみました。 結果は、大変申し訳ないのですが、 JDBCの文字列誤り(末尾に空文字が含まれていた)のため、エラーとなっておりました。 ※iBATISのソースをデバッグして気付きました。。 つまらないミスでお時間を頂いてしまい申し訳ありません。 直接DB接続するJavaソースも載せておきます。 --------------------------------------------------------------------------- ■直接DB接続するJavaソース Connection conn = null; try{ DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); String strConnect = "jdbc:oracle:thin:@192.168.XXX.XXX:1521:sid"; conn = DriverManager.getConnection (strConnect, "user", "pass"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("select * from test_table"); if (rs != null) { while(rs.next()) { String column1 = rs.getString(1); System.out.println(column1); } } if (conn != null) { conn.close(); } } catch(Exception e){ e.printStackTrace(); } --------------------------------------------------------------------------- 以上です。 ありがとうございました。 [ メッセージ編集済み 編集者: シン 編集日時 2008-05-08 00:34 ] |
1