• 締切済み

Tomcat上でMS-ACCESSに接続しようとするとメモリ不足になる

Tomcatサーバー上で、MS-AccessにODBC経由で接続しようとすると、 "java.sql.SQLException [Microsoft][ODBC Microsoft Access Driver] メモリ不足です。" というエラーになってしまいます。 Javaのコードは、以下のようになります。 --------------------------------------------------------- Connection conn = null; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); conn = DriverManager.getConnection("jdbc:odbc:データソース名"); --------------------------------------------------------- 上記3行目の、DriverManagerの部分でエラーになってしまいます。 同じサーバー上でOracleやDB2へのJDBC接続は問題なく接続できます。 TomcatのJavaメモリ設定は、以下のようになっております。 Initial memory pool : 1024 MB Maximum memory pool : 1536 MB Thread stack size : 1024 MB サーバーの物理メモリは2GBで、通常時のメモリ使用量はおおよそ1.4GB程なのでメモリ不足にはならないと思われるのですが、なぜ接続できないのでしょうか? また、同じプログラムをローカル上で実行した場合には、問題なく接続できます。 尚、サーバーの環境は以下のようになります。 OS : Windows 2003 Server R2 メモリ : 2GB Tomcatのバージョン : 5.5 JDKのバージョン : 1.5 以上、宜しくお願い致します。 

  • 6860
  • お礼率76% (10/13)
  • Java
  • 回答数10
  • ありがとう数25

みんなの回答

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

> TomcatのJavaメモリサイズを変更してから問題が発生していると > 思われるのですが、この事が影響しているとは考えられないでしょうか 私に聞くより先に元に戻して確認してみてはどお? > 具体的には、どのjarファイルの事でしょうか 端から確認するしかないわね > JDBCドライバ関係のjarファイルは、 ODBC接続なのにドライバのjarがあるの? クリーンなTomcatでODBC接続のテストしたら 上手くいったりしてね。 そうすれば、原因が特定しやすいかもよ。

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

> 同じサーバでも 目の前で確認できないのが残念だわ。 コマンドラインで問題なくてTomcatで問題がある コマンドラインから行うとき Tomcatのライブラリを使っていれば 実行内容に差が出るとは思えないんだけどね。 たぶんどこかに違いがあるんだわ。 > 無償で入手できるドライバはないのでしょうか? 無かったのなら無いのね。 有償な代わり正規な使い方をしている限り 何かあった場合しっかりサポートしてくれるわよ。 そうだ、 何にもならないかもしれないけど jarファイルの配置とか確認してみるといいかもよ。 案外ライブラリのロードでループが発生しているかもしれないから。

6860
質問者

お礼

ご回答ありがとうございます。 >コマンドラインで問題なくてTomcatで問題がある おっしゃる通りなんですよね。 コマンドラインでは問題なく接続できて、Tomcat上では接続できない という状況です。 TomcatのJavaメモリサイズを変更してから問題が発生していると 思われるのですが、この事が影響しているとは考えられないでしょうか? >jarファイルの配置とか確認してみるといいかもよ 具体的には、どのjarファイルの事でしょうか? JDBCドライバ関係のjarファイルは、 Tomcatインストールフォルダ\common\lib フォルダ上に置いてあります。

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

> システムの都合上、同じサーバー上にmdbファイルはおけないように > なっております。。。 でも検証は可能だと思うけど。 同じサーバ上でやってみて問題なければ 別サーバにあることが(またはそのやり方が)問題と言うことになるわよ。 > JDBCドライバをダウンロードするには ええ、そうよ。 各ベンダーから入手するの。 そのままダウンロードできるベンダーもあれば 事前にユーザ登録が必要なベンダーもあるわ。 ユーザ登録の方法もWebフォームとは限らないので 各ベンダーのサイトを良く読んでね。 > 一般的に、よく使用されているドライバ これと言ってないと思うわ。 検証していないのでどれかを推すこともできないし。 そこはなんとも言えないわ。 ゴメンね。

6860
質問者

お礼

>同じサーバ上でやってみて問題なければ 同じサーバー上のmdbファイルに対して接続処理を実行してみましたが 同じくメモリ不足エラーになりました。 各ベンダーのサイトを見てみましたが、こちらで確認できた全ての サイトについて、ドライバは有償のようです。 無償で入手できるドライバはないのでしょうか?

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

そういう方法があるのね。 ・・・案外原因はそこだったりしてね。 同じサーバ上にmdbおいたら問題が解決したりして。 ドライバは http://devapp.sun.com/product/jdbc/drivers に沢山登録されているので選ぶといいわ。 悪いけどお勧めはできないわ。 検証したことないのよ。 jackcessはどうなのかしら。 ぱっと見た感じSQLではなく直接mdbをいじるみたいだけど。 Accessへのバージョンの対応が不明ね。 サンプルも見つからなかったわ。 APIがわかりやすいのでサンプルなんかいらない ていう意味かもしれないけど。

6860
質問者

お礼

ご回答ありがとうございます。 >同じサーバ上にmdbおいたら問題が解決したりして システムの都合上、同じサーバー上にmdbファイルはおけないように なっております。。。 教えて頂いたサイト上から、JDBCドライバをダウンロードするには どのようにすれば宜しいのでしょうか? (各ベンダーのサイトに移動してダウンロードするのでしょうか?) >悪いけどお勧めはできないわ。 >検証したことないのよ。 一般的に、よく使用されているドライバはご存じでしょうか?

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

え? mdbは別サーバにあるの? それはネットワークドライブとかで繋いでいるってこと?

6860
質問者

補足

一度ローカル上の適当なファイルでODBCを登録後、レジストリ エディタで他のサーバーの共有フォルダ上のファイルを フルパスで入力する事により、他のサーバーのファイルに 接続をする事が可能です。 ODBC以外の方法として、jackcessというJDBCドライバを見つけた のですが、使用例が少なく使い方がよく分かりません。 このjackcessの使用方法はご存じでしょうか? または他のJDBCドライバをご存じでしょうか?

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

実はメモリを割り当てすぎて Accessに割り当てるメモリがなくなった ていうオチだったりしてね。 実物がないとやっぱりわかんないわ。 調べると同様の問題もあるみたいだし そっちはODBCドライバを使わない方法や 他のデータベースを用いる方法で 解決したみたいだけど。 それも一つの方法かもしれないわね。

6860
質問者

お礼

ご回答ありがとうございます。 >Accessに割り当てるメモリがなくなった Accessのファイルが置いてある場所は別のサーバーになります。 >そっちはODBCドライバを使わない方法や ODBCドライバを使用せず、Accessのファイルに接続する方法が あるということでしょうか? 具体的には、どのような方法になるのでしょうか?

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

どうやら ODBC接続すると発生するようね。 理由は不明だけど。 JDBC-ODBCブリッジの不具合かしら。 getConnection(url)を getConnection(url, user, passowrd) でやってみると上手くいくかも?

6860
質問者

お礼

ご回答ありがとうございます。 getConnection(url, user, passowrd) に変更してみましたが、 結果は同じくメモリーエラーになりました。 実は、前はこのAccessに接続するプログラムは正常に動いていた のですが、最近になってエラーが出るようになりました。 最近行った事といえば、TomcatのJavaメモリ設定を以下のように変更 したのですが、この事が影響しているのでしょうか? Initial memory pool : 512MB ---> 1024 MB Maximum memory pool : 768MB ---> 1536 MB Thread stack size : 512MB ---> 1024 MB

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

Tomcatの問題 ではなく Tomcat周りの問題 ね。 ただの設定ミスかもしれないし。 次はそのコマンドラインアプリをServletにして 実行してみるといいわ。 mainをdoGetにして動かすの。 ・それで問題ない場合、   あなたが最初に実装したコードを変えたほうがいいかもしれないわ。 ・それで重くなった場合   データソース名が解決できてないのかも?   もっと情報が欲しくなるわ。   とりあえずそのときね。

6860
質問者

お礼

ご回答ありがとうございます。 Servletにしてサーバー上で実行したところ、同じくメモリ不足 エラーになりました。 (今までと同じくローカル上では問題なく動きました。) ODBCのデータソース名やデータソースの指定先のmdbファイルを 変更してみましたが、エラーは変わりませんでした。

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

ごくごく普通にコマンドラインから実行するだけよ? データベースに接続するなんて Tomcatいらないと思うけど。 ましてや上の3行なんてTomcatに関連している要素 まったくないわよ? どうしても必要ならTomcatのライブラリを利用すればいいわ。 参考:http://www.hellohiro.com/jdbc.htm

6860
質問者

お礼

ご回答ありがとうございます。 ご連絡頂いたように、サーバー上でコマンドラインだけで 実行したところ正常にACCESSに接続できて、 データの表示もする事ができました。 ということは、Tomcatの問題ということになるのでしょうか?

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

> 同じプログラムをローカル上で実行した場合には Tomcatを使わずにサーバでそのコードを 単体で動かしたらどおかしら? もちろんTomcatで動かすのと まったく同じJavaで動かすこと。

6860
質問者

お礼

askaaskaさん ご回答ありがとうございます。 >Tomcatを使わずにサーバでそのコードを Tomcatを使わずにということですが、具体的にはどのように行ったら宜しいのでしょうか? Javaでのデータベースへの接続処理は、かなりTomcatに依存する部分があるような気がするのですが・・・何かよいツールみたいなものがあるのでしょうか? 宜しくお願い致します。

関連するQ&A

  • Tomcat上で動くサーブレットがデータソースを見つけられない

    こんにちは。 以前にjdbcとサーブレットに関する質問をさせてもらった者です。 以前の質問に対する皆さんのご回答のおかげで、以前の問題は解決し、あとは自分でなんとかすると言っていたのですが… 新たな問題に直面しまして自分なりに努力はしたのですが、やはり解決には至らず、結局皆さんの助言を賜りたくて来ました。 JDBC-ODBCブリッジドライバを使って、Oracle10gデータベースを問い合わせるTomcat6.0サーバ上で動作するサーブレットの構成を行っています。 データベース、サーバ、サーブレットは同一のハードウェア内で動作しています。 環境は以下の通りです。 データベース : Oracle10g 使用ポート番号:8081 データソース名:OracleInXE サーバ : Tomcat6.0 使用ポート番号:8080 接続API : jdbc-odbcブリッジドライバ データベース接続部のソースを一部抜粋します。 ~ Connection connection = null; Statement statement = null; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); connection = DriverManager.getConnection("jdbc:odbc://localhost:8081/OracleInXE",user.getName(),user.getPassword()); statement = connection.createStatement(); ~ SQLExceptionで取得したスタックトレースの内容を記述します。 [Microsoft][ODBC Driver Manager] データ ソース名および指定された既定のドライバが見つかりません。 at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source) at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source) at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(Unknown Source) at sun.jdbc.odbc.JdbcOdbcConnection.initialize(Unknown Source) at sun.jdbc.odbc.JdbcOdbcDriver.connect(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at employeeManagementSystem.Query.authentication(Query.java:59) at Run.main(Run.java:33) しかし上記の場合だとSQLExceptionga発生し、"データ ソース名および指定された既定のドライバが見つかりません。"と表示されます。 サーブレットがデータソースを見つけられない原因は何でしょうか。 あと、その解決法や、役立つ情報があれば教えて下さい。 宜しくお願いします。 データソースのURLが間違っているのでしょうか。 また、ドライバクラスとURL表記の組み合わせも色々あるみたいでややこしいです… 何か、小さい事に引っかかっている感じがするのですが。

    • ベストアンサー
    • Java
  • tomcatからのoracle接続エラーについて

    お世話になります。 javaサーブレットからoracleに接続する際、以下のエラーが発生して困っております。 エラー:java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver 解決するための情報を頂けますでしょうか。 私がテストしている環境は、以下となります。 【Webサーバ】 centOS5.5. jdk1.6 tomcat5.5 【DBサーバ】 centOS5.5. oracle11g r2 jdbcドライバーは、ojdbc6.jarを使用しております。 ドライバーは、Webサーバの /WEB-INF/libと$TOMCAT_HOME/common/lib配下に設置しております。 環境変数クラスパスに$TOMCAT_HOME/common/libが、設定されていることも確認しております。 JDBCドライバについては、以下の3パターンで試してみましたがすべて同じエラーとなりました。  ・オラクルインストール時のもの(DBサーバ)  ・オラクルHPの11g r2(11.2.0.1)のもの  ・オラクルHPの11g r2(11.2.0.2)のもの どのJDBCドライバを配置した時も、cataline.outには、 oracle.jdbc.OracleDriverクラスが、追加できたというログが出力されておりました。 尚、同じWebサーバでpostgresqlに接続するjavaサーブレットは、/WEB-INF/lib 配下にJDBCドライバーを配置しているだけで問題なく動作しております。 お手数お掛け致しますが、ご教授宜しくお願い致します。

    • ベストアンサー
    • Java
  • サーブレットからJavaBeansを利用したDB接続について

    初歩的な質問ですみません。 下記環境で、Javaを勉強しています。 教材 :やさしいJava 活用編 Lesson8 Sample5 実行環境:j2sdk1.4.1_07 (教材では、j2sdk-1_4_0) Tomcat 5.0(教材では、Tomcat-3.2.3) IE6.0 サーブレットでリクエストを受付け、JavaBean経由でDBに接続(Access2000を利用)しDBの中身をJSPで表示するいう流れです。サーブレットのURLを指定して実行してもjspページには何も表示されません。 ログファイルには下記エラーが記述されています。 勘違いか、何らかの初歩的なミスだと思いますが、解決方法が見つかりません。解決方法をご存知の方教えて下さい。よろしくお願いします。 尚、JDBC-ODBCドライバを使用していますが、サーブレットからではなくJavaアプリからではAccess2000のDB参照更新が出来ています。サーブレットから(JavaBean経由)だとうまくいかないという事象です。 java.sql.SQLException: [Microsoft][ODBC Driver Manager] データ ソース名および指定された既定のドライバが見つかりません。 at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6879) at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7036) at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(JdbcOdbc.java:3028) at sun.jdbc.odbc.JdbcOdbcConnection.initialize(JdbcOdbcConnection.java:323) at sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:174) at java.sql.DriverManager.getConnection(DriverManager.java:512) at java.sql.DriverManager.getConnection(DriverManager.java:171) at CarDB.CarDBBean.<init>(CarDBBean.java:22) at Sample5.doGet(Sample5.java:16) at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at ~略~

  • javaからAccessをアクセスするときにファイルを直接指定できないのですか?

    JavaでMicrosoft Accessにアクセスするときに以下のプログラムでアクセスしました。 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con = DriverManager.getConnection("jdbc:odbc:DBs"); このプログラムを作成する前にODBC データソース アドミニストレータでデータベースの登録を行いました。 データベース名はデータソース名に拡張子を付けた名前にしました。 ODBC データソース アドミニストレータの登録を行わずにプログラムの中にファイルの場所を記述してMicrosoft Accessにアクセスすることはできないのでしょうか?

  • MS Access への接続について

    JavaからDBへの接続設定についての質問です。 Javaで作ったプログラムからMS Accessへの接続は、一般的には JDBC経由で行うと思うのですが、これをMS ExcelからAccessへ接続 する時のように、Jet OLEDB経由(のような)接続することは可能でしょうか? admin権限のないユーザーでODBCの設定ができない時、Javaの プログラムからAccessに接続したいということなのですが、 何か良い方法があればご教授下さい。 よろしくお願いします。

  • java データベース接続

    javaの勉強していまして、質問があります。よろしくお願いします。 javaでデータベースの接続ができなくて迷っております。ずっとネットで調べてもダメでした。 ネットで調べたとおりにやっても、 例外発生:java.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver このようなエラーがでます。 eclipseを使ってます。windows7 練習にアクセスにつなごうと思ってます。 事前にデータソース(ODBC)の登録はしました。 ドライバーとかインストールするものなのでしょうか? package sample; import java.sql.Connection; import java.sql.DriverManager; public class Hello { public static void main(String args[]) { try { //JDBCドライバのロード Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //各設定 String url = "jdbc:odbc:SampleDB030"; String user = ""; String pass = ""; //データベースに接続 Connection con = DriverManager.getConnection(url,user,pass); System.out.println("接続成功"); //データベースを切断 con.close(); } catch (Exception e) { System.out.println("例外発生:" + e ); } } }

    • ベストアンサー
    • Java
  • TomcatとPostgreSqlの接続について

    Tomcat4.0.4とApache1.3.26を使用しDBはPostgreSQLをつかっているのですが、DB接続がうまくいきません。 接続の際の記述は以下の通りです public void init(ServletConfig conf) throws ServletException { try{ Class.forName("org.postgresql.Driver"); String url = "jdbc:postgresql://localhost:8080:5432/test"; String user = "nakayama"; String pwd = "noah"; con = DriverManager.getConnection(url,user,pwd); }catch(Exception e){ err = err + "DataBase Connection err = " +e+"<br>"; } } これで実行すると、以下のエラーが出ます。 DataBase Connection err = Something unusual has occured to cause the driver to fail. Please report this exception: Exception: java.lang.NullPointerException Stack Trace: java.lang.NullPointerException at org.postgresql.Connection.openConnection(Connection.java:155) at org.postgresql.Driver.connect(Driver.java:149) at java.sql.DriverManager.getConnection(DriverManager.java:512) at java.sql.DriverManager.getConnection(DriverManager.java:171) at toroku2.init(toroku2.java:24) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:918) at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:655) at ・・・・・ どうすれば解決できるのでしょうか? 教えてくださいm(__)m

    • ベストアンサー
    • Java
  • Java1.6でOracle11gに接続エラー

    以下の環境で接続試みているのですが、エラーが発生します。 ご教授願います。 <環境> JDK1.6.0_17 TOMCAT6 ORACLE11g <エラー内容> java.lang.ArrayIndexOutOfBoundsException: 7 at oracle.security.o3logon.C0.r(C0) at oracle.security.o3logon.C0.l(C0) at oracle.security.o3logon.C1.c(C1) at oracle.security.o3logon.O3LoginClientHelper.getEPasswd(O3LoginClientHelper) at oracle.jdbc.ttc7.O3log.<init>(O3log.java) at oracle.jdbc.ttc7.TTC7Protocol.logon(TTC7Protocol.java) at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java) at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java) at java.sql.DriverManager.getConnection(DriverManager.java:582) at java.sql.DriverManager.getConnection(DriverManager.java:185) ・・・以下続く 簡単ですが、現在のソースです。 Context initContext = new InitialContext(); //JNDIルックアップでデータソース取得 DataSource ds = (DataSource)initContext.lookup("java:comp/env/jdbc/SampleDB"); Connection conn = ds.getConnection(); ドライバを変えて、他のバージョン(9iや10g)には接続問題なくできています。

    • ベストアンサー
    • Java
  • Tomcatへのアクセスについて

    現在、Tomcat5.5を使用して、Webアプリを構築しているのですが、 突然Tomcatへのアクセスができなくなる現象が起きています。 Webサーバーの起動等に問題は無いので、原因が分からず困っております。 一度にアクセスするユーザーとしては、50前後です。 どなたか、お分かりの方がいましたら、申し訳ありませんが、解決方法や調査方法などを ご教授頂けると大変助かります。 よろしくお願い致します。 Webサーバー : Windows2008 (64ビット) メモリ: 6GB ハード: 700GB 

  • JDBCでaccessから取得したデータをjTableに表示させたい。

    JDBCでaccessのデータベースから取得したデータをjTableに表示させたいのですが どのようにしたらセルのデータやタイトルを入力させることができますか? またデータベースを操作したらその結果を表示させたいと考えています。どのようにすれば実現できるでしょうか? accessのデータベースには以下のように接続していました。 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String str = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=hello.mdb"; Connection con = DriverManager.getConnection(str, "", ""); 開発環境はNetBeansを使用しています。

専門家に質問してみよう