- - PR -
Httpで、ACCESSを接続しようとしたけど、失敗しました
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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) これはどうしてでしょうか。 | ||||
|
投稿日時: 2005-04-28 14:54
DriverManager.getConnection で失敗してますよね?
TestO クラスには DriverManager.getConnection をしている箇所がみあたらないのですが、MechDAO クラスの内部かなにかで呼び出しているのでしょうか? サーブレットの場合とそうでないばあい、何を比較しているのかいまいちわかりませんでした。 DriverManager.getConnection でコネクションの取得ができるか、まずサーブレットじゃないクラスから実行して検証してみてはいかがでしょうか。 | ||||
|
投稿日時: 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 16:21
こんにちわ。
具体的な環境がわからないので何とも言えません(分かっても多分言えませんけど。。。)が、 ttp://www.jajakarta.org/kvasir/bbs/technical/141?msg=3#msg568 が関係ありませんか? | ||||
|
投稿日時: 2005-04-28 16:26
Tomcatから、ドライバクラスが見えてないのでは?
以前、Eclipseで、くだんのドライバクラスを取得しようとして、失敗したことがあります。 IBMのマシンだったのですが、JREをマシンに最初から入っていたものから、 Sunからダウンロードしてインストールしたものに入れ替えたら、解決しました。 %CATALINA_HOME%\server\lib 以下のライブラリを確認してみてはどうでしょうか。
行儀の悪いことはしない方がいいですよ。<自分がいうな、といわれそうですが。 | ||||
|
投稿日時: 2005-04-28 16:27
こんにちわ。
見たところDBアクセス:パスワードを指定していませんが アクセス権絡みは大丈夫でしょうか? ちょっと検索かけてみたら、アクセス権をつけていなくて 同じエラーが出ている人もいるみたいです。 tomcatはサービス起動でしょうか? あまり詳しくないのですが、サービスだと実行ユーザがローカル システムアカウント(?)とかになりますよね。 そうするとネットワークアクセス権がないので蹴られるかも? と思ってますがハズれでしょうか。 他のApplicationはおそらくログインユーザで実行しているで しょうから大丈夫だったとか。 [ メッセージ編集済み 編集者: (株)ぽち 編集日時 2005-04-28 16:29 ] [ メッセージ編集済み 編集者: (株)ぽち 編集日時 2005-04-28 16:29 ] | ||||
|
投稿日時: 2005-04-28 16:36
なんで%CATALINA_HOME%以下の確認なんでしょうね。m(_ _;m ・マシンに複数のJREがインストールされていないかどうか ・Tomcatを稼働しているJREは、アプリケーションで利用しているJREと同じかどうか を確認してみては。 | ||||
|
投稿日時: 2005-04-28 22:27
Tomcatをサービスで起動していませんか? サービス起動アカウントに権限がないために
ODBCの設定を参照できないのではないかと思います。Tomcatを手動で起動してみたら どうなりますか? |