- - PR -
JDBC-ODBC接続について
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-08-25 07:32
JDBC-ODBCで接続しようとしていますが上手くいきません。
ご教授ください。 1:現象 Db_Connect.java(下記ソース参照のClass.forName(strClassDriver);での java.lang.ClassNotFoundException:com/microsoft/jdbc/sqlserver/SQLServerDriver 1:ディレクトリ WEB-INF/classes/dev この直下にモジュールを格納 2:DBコネクトクラス --------------- Db_Connect.java ------------------------ package dev; import javax.sql.*; import java.sql.*; import java.util.*; public class Db_Connect { /** DateBase Connection */ private transient Connection conn = null; /** Get DB connection @return DBconnection */ public Connection getConnection() throws SQLException { String strClassDriver = null; // JDBCDriver String strUrl = null; // DBURL String strUser = null; // USER_ID String strPass = null; // PASSWORD // Set DateBase Connection strClassDriver = "com.microsoft.jdbc.sqlserver.SQLServer"; strUrl = "jdbc:microsoft:sqlserver://192.168.100.26:1433"; strUser = "DB_USER_ID"; strPass = "DB_PASSWD"; try { Class.forName( strClassDriver ); conn = DriverManager.getConnection(strUrl, strUser, strPass); if(conn == null) { throw new SQLException("getConnection denied"); } } catch(SQLException se) { throw se; } catch(ClassNotFoundException cne) { throw new SQLException( cne.toString() ); } return conn; } } --------------- Db_Connect.java END ------------------------ 3 接続をテストするためのサンプルコードで実行した所正常に動作 デプロイ先は同一(WEB-INF/classes/dev) しかし A,最初,コマンドラインで実行した所java.lang.ClassNotFoundException:com/microsoft/jdbc/sqlserver/SQLServerDriverが発生したので『環境変数の設定』WEB-INF/classes/devでパスを通した。 B,最初,package dev;を記述していたが(WEB-INF/classes/devにデプロイしたので)Aと同様の現象が起きたため、削除した。 --------------- サンプルコード(Connect.java) ------------------------ import java.*; public class Connect { private java.sql.Connection con = null; private final String url = "jdbc:microsoft:sqlserver://"; private final String serverName= "192.168.100.26"; private final String portNumber = "1433"; private final String databaseName= "sql_server"; private final String userName = "noho"; private final String password = "capps"; // Informs the driver to use server a side-cursor, // which permits more than one active statement // on a connection. private final String selectMethod = "cursor"; // Constructor public Connect(){} private String getConnectionUrl() { return url+serverName+":"+portNumber; } private java.sql.Connection getConnection() { try { Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); con = java.sql.DriverManager.getConnection(getConnectionUrl(),userName,password); if(con!=null) { System.out.println("Connection Successful!"); } } catch(Exception e) { e.printStackTrace(); } return con; } /* Display the driver properties, database details */ public void displayDbProperties() { java.sql.DatabaseMetaData dm = null; java.sql.ResultSet rs = null; try { con= this.getConnection(); if(con!=null) { dm = con.getMetaData(); rs = dm.getCatalogs(); while(rs.next()) { System.out.println("\tcatalog: "+ rs.getString(1)); } rs.close(); rs = null; closeConnection(); } else { System.out.println("Error: No active Connection"); } } catch(Exception e) { e.printStackTrace(); } dm=null; } private void closeConnection() { try { if(con!=null) { con.close(); } con=null; } catch(Exception e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception { Connect myDbTest = new Connect(); myDbTest.displayDbProperties(); } } --------------- サンプルコード(Connect.java) END ------------------------ 4 http://support.microsoft.com/default.aspx?scid=kb;ja;313100#3で指定されている パスは全て設定済み。 ●\インストール パス \Lib\Msbase.jar ●\インストール パス \Lib\Msutil.jar ●\インストール パス \Lib\Mssqlserver.jar よろしくお願いします。 | ||||
|
投稿日時: 2004-08-25 09:17
まず、そのドライバは Type4(PureJavaドライバ)で、JDBC-ODBC(Type1)ではないと思います。
http://java.sun.com/products/jdbc/driverdesc.html マイクロソフトのドキュメントにもありますが、一般的な ClassNotFoundException と同じくクラスパスが通っていないのが原因です。 >B,最初,package dev;を記述していたが(WEB-INF/classes/devにデプロイしたので)Aと同様の現象が起き >たため、削除した。 "WEB-INF/classes/dev にデプロイした"とはどういう意味でしょうか?これはサーブレットではないようです。main メソッドもありませんがどのように実行していますか? サーブレット内から呼びだしているのであればアプリケーションサーバのクラスパスに jar を通すか、WEB-INF/lib ディレクトリにライブラリを配置しましょう。 | ||||
|
投稿日時: 2004-08-25 09:24
うーん、この手のって過去ログにゴロゴロ転がっているはず・・・。 Tomcat等のAPサーバーは、環境変数のクラスパスを無視します。 ですから、JDBCドライバーのjarファイルを、 クラスパスが通る場所に配置する必要があります。 例えば、下記などはファイルを置くだけでクラスパスが通っているとみなされます。 %CATALINA_HOME%/common/lib %JAVA_HOME%/jre/lib/ext | ||||
|
投稿日時: 2004-09-07 17:35
初めて投稿します。
スレッド立てた方と同じ現象が起きます。JSP内(AP鯖はTomcat4)からMySQL(ver.4)に接続しようとすると以下のエラー。コネクターはmysql-connector-java-3.0.15です。 エラー内容(Eclipse3から取ってきました。普通にTomcatを動かしても同様の症状が出ますのでEclipseのエラーではなさそうですが…) ------------------------------------------------------------------------------ 情報: Jk running ID=0 time=10/341 config=C:\Program Files\Apache Group\Tomcat 4.1\conf\jk2.properties java.lang.ClassNotFoundException: com.mysql.jdbc.Driver.class ------------------------------------------------------------------------------ 試したこと。 1.環境変数についてはTomcatは上書きするとのことなので、webアプリの/libの中においてみましたが、アウト。 2.それならばということで、TomcatのHOME下の/libに投入。しかし、だめ。 3.最後にJDKの/jre/lib/extに起きましたが、やっぱりエラー(汗) #Class.forName("com.mysql.jdbc.Driver.class"); で呼んでいます ひょっとして、読み込まれてないのかな?と思ってファイルを動かそうとするとTomcatが稼働している間はファイルがロックされている旨の警告がでます。 なにか他に考えられる原因はありませんでしょうか…? | ||||
|
投稿日時: 2004-09-07 17:39
.classは不要です。 | ||||
|
投稿日時: 2004-09-07 17:46
これだと、「com.mysql.jdbc.Driver.class」という名前のクラスを探しにいくので、 「com.mysql.jdbc.Driver.class.class」というクラスファイルを、 見つけることが出来ないために、 ClassNotFoundExceptionが発生しているはずです。 ですから、正しくは、 Class.forName("com.mysql.jdbc.Driver"); となるかと思います。 ※MySQLのJDBCドライバーのクラス名が、 正しいかどうかはご自分で確認をして下さい。 | ||||
|
投稿日時: 2004-09-08 10:35
ukさん、takuさん回答ありがとうございます。
ご指摘の通り、.classまで指定してたのが不具合の原因でした(汗) #jarの中に入っているのですから当然ですね... 個別のアプリのWeb-inf/lib以下において動作できました。 ありがとうございましたm(._.)m 教訓:設定疑う前に自分のコードを疑おう | ||||
|
投稿日時: 2004-09-08 10:52
> #jarの中に入っているのですから当然ですね...
ん? jar に入っているのは関係ありませんよ? WEB-INF/classes 以下に展開して配置したとしても同じです。 | ||||
1
