- PR -

Httpで、ACCESSを接続しようとしたけど、失敗しました

投稿者投稿内容
Chumomo
常連さん
会議室デビュー日: 2005/03/04
投稿数: 33
投稿日時: 2005-04-28 14:45
アプリケーションとして、

  public class TestO {

public static void main(String[] args) throws Exception,SQLException {
MechDAO dao=new MechDAO();  //データベースからデータを取得
ArrayList al=dao.getAll();

for(int i=0;i<al.size();i++){
Object o=al.get(i);
String word=((Word)o).word;
String content=((Word)o).content;
String type=((Word)o).type;
System.out.print(al.size());
System.out.print(word);
System.out.print(content);
System.out.println(type);
}

}
}
のように、実行成功しましたが、サーブレットにしたら、
public class TestH extends HttpServlet {

public void doGet(HttpServletRequest req,HttpServletResponse res)
throws ServletException,IOException{
   //見やすいため、データベースと接続するコードも記述します。
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn=DriverManager.getConnection("jdbc:odbc:words"); //words はデータソースです

Statement stmt=conn.createStatement() ;
ResultSet rs=stmt.executeQuery("select * from words");

ArrayList al=new ArrayList();
while(rs.next()){
String word=rs.getString("word");
String content=rs.getString("content");
String type=rs.getString("type");
al.add(new Word(word,content,type));
}


res.setContentType("text/html;charset=Shift-JIS");
PrintWriter pw=res.getWriter();

pw.println("<html><center><table>");
for(int i=0;i<10;i++){
pw.println("haha");
}

pw.println("</table></html>");
}catch(SQLException ex){
ex.printStackTrace();
}catch(ClassNotFoundException ex){
ex.printStackTrace();
}catch(Exception ex){
ex.printStackTrace();
}
}

public void doPost(HttpServletRequest req,HttpServletResponse res)
throws ServletException,IOException{
doGet(req,res);
}

}
ーー以下のようなエラーが出てきました。
java.sql.SQLException: General error
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6987)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115)
at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(JdbcOdbc.java:3074)
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:193)
at chuMech.TestH.doGet(TestH.java:19)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)
これはどうしてでしょうか。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-04-28 14:54
DriverManager.getConnection で失敗してますよね?
TestO クラスには DriverManager.getConnection をしている箇所がみあたらないのですが、MechDAO クラスの内部かなにかで呼び出しているのでしょうか?
サーブレットの場合とそうでないばあい、何を比較しているのかいまいちわかりませんでした。

DriverManager.getConnection でコネクションの取得ができるか、まずサーブレットじゃないクラスから実行して検証してみてはいかがでしょうか。
Chumomo
常連さん
会議室デビュー日: 2005/03/04
投稿数: 33
投稿日時: 2005-04-28 15:58
返信ありがとうございます、

おしゃった通り、サーブレットDriverManager.getConnectionで失敗しましたが、
============================================
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn=DriverManager.getConnection("jdbc:odbc:words");
============================================
この辺で、エラー出たようです。しかし、データ取得するコードが同じApplicationの場合、何のエラーもありませんでした。

ということで、サーブレットじゃないクラスから実行するのは大丈夫だという結果。

どうしよう、兄貴、Help~~


はじ
会議室デビュー日: 2005/04/28
投稿数: 1
投稿日時: 2005-04-28 16:21
こんにちわ。

具体的な環境がわからないので何とも言えません(分かっても多分言えませんけど。。。)が、
ttp://www.jajakarta.org/kvasir/bbs/technical/141?msg=3#msg568
が関係ありませんか?
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2005-04-28 16:26
Tomcatから、ドライバクラスが見えてないのでは?
以前、Eclipseで、くだんのドライバクラスを取得しようとして、失敗したことがあります。
IBMのマシンだったのですが、JREをマシンに最初から入っていたものから、
Sunからダウンロードしてインストールしたものに入れ替えたら、解決しました。
%CATALINA_HOME%\server\lib 以下のライブラリを確認してみてはどうでしょうか。
引用:

どうしよう、兄貴、Help~~


行儀の悪いことはしない方がいいですよ。<自分がいうな、といわれそうですが。
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2005-04-28 16:27
こんにちわ。

見たところDBアクセス:パスワードを指定していませんが
アクセス権絡みは大丈夫でしょうか?

ちょっと検索かけてみたら、アクセス権をつけていなくて
同じエラーが出ている人もいるみたいです。

tomcatはサービス起動でしょうか?
あまり詳しくないのですが、サービスだと実行ユーザがローカル
システムアカウント(?)とかになりますよね。

そうするとネットワークアクセス権がないので蹴られるかも?
と思ってますがハズれでしょうか。

他のApplicationはおそらくログインユーザで実行しているで
しょうから大丈夫だったとか。



[ メッセージ編集済み 編集者: (株)ぽち 編集日時 2005-04-28 16:29 ]

[ メッセージ編集済み 編集者: (株)ぽち 編集日時 2005-04-28 16:29 ]
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2005-04-28 16:36
引用:

%CATALINA_HOME%serverlib 以下のライブラリを確認してみてはどうでしょうか。


なんで%CATALINA_HOME%以下の確認なんでしょうね。m(_ _;m

・マシンに複数のJREがインストールされていないかどうか
・Tomcatを稼働しているJREは、アプリケーションで利用しているJREと同じかどうか

を確認してみては。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2005-04-28 22:27
Tomcatをサービスで起動していませんか? サービス起動アカウントに権限がないために
ODBCの設定を参照できないのではないかと思います。Tomcatを手動で起動してみたら
どうなりますか?

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