之前我在tomcat6.0下配置过sql2000,mysql的连接池,这次想配置oracle的,但出现了问题。
环境:Eclipse3.3+myeclipse6.0的合成版,tomcat6.0,oracle9版
1.我已在context.xml和server.xml下做了如下配置
<Resource auth="Container" 
driverClass="oracle.jdbc.OracleDriver"
maxActive="100" maxIdle="30" maxWait="10000"
name="jdbc/oracleds" username="scott" password="tiger" 
type="javax.sql.DataSource"
url="jdbc:oracle:thin:@localhost:1521:ketty" />
2.已在tomcat lib目录下和项目中添加了ojdbc14.jar
3.在servlet中获取数据源并对表单提交过来的数据进行操作。
Context context = new InitialContext();
DataSource ds = (DataSource) context.lookup("java:/comp/env/jdbc/oracleds");
运行时出现错误,问题描述如下:
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'jdbc:oracle:thin:@localhost:1521:ketty'
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:780)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)
at webbook.guestbook.AddMessageServlet.doPost(AddMessageServlet.java:37)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
Caused by: java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getDriver(Unknown Source)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:773)
... 16 more
2008-12-9 22:52:19 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet AddMessageServlet threw exception
java.lang.NullPointerException
at webbook.guestbook.AddMessageServlet.doPost(AddMessageServlet.java:54)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
第二个地方报错说驱动不匹配,这点我觉得可以否定,因为驱动是已安装的oracle自带的。
关于第一个错误我上网查了很多,但没有一个明确答案。希望大家帮我看看。
不管上面的问题您能不能帮忙解决,请帮我解答下这个基础问题:
如果我们要直接获取连接,则需要在项目中添加相应的数据库驱动,但我在看一视频教程时却发现这么个问题,就是在配置缓冲池的情况下,它将项目中的oracle驱动给移除了,说不移除可能引起问题,给我的感觉此时是多余的。但我就不懂了,在配置缓冲池时不是有这么个参数么driverClass="oracle.jdbc.OracleDriver",这个参数应该要用到相应驱动啊,后来仔细想想,在context.xml和server.xml中配置的缓冲池是与项目无关的,移除也是有可能的,但我就不清楚了,此时driverClass这里的值又是什么意思,这个驱动类来自哪里?难道这里driverClass有另类解释?或者说其值oracle.jdbc.OracleDriver可以随便取?这个应该不可能吧,毕竟之前我配置过sql2000和mysql的缓冲池,希望大家帮我解释下。

解决方案 »

  1.   

    JNDI吧?没配置好,没找到Driver类配置
      

  2.   

    给个链接,LZ参考下
    http://space.itpub.net/12125877/viewspace-468058
      

  3.   

    我当时这样设置的: <Resource name="jdbc/dbcp" auth="Container" type="javax.sql.DataSource"/>
     <ResourceParams name="jdbc/dbcp">
     <parameter>
     <name>factory</name>
     <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
     </parameter>
      <parameter>
         <name>url</name>
         <value>jdbc:JSQLConnect://localhost/database=fccs</value>
        </parameter>
        <parameter>
         <name>driverClassName</name>
         <value>com.jnetdirect.jsql.JSQLDriver</value>
        </parameter>
     <parameter>
     <name>maxActive</name>
     <value>100</value>
     </parameter>
     <parameter>
     <name>maxIdle</name>
     <value>30</value>
     </parameter>
     <parameter>
     <name>maxWait</name>
     <value>10000</value>
     </parameter>
      <!-- SQLServer dB username and password for dB connections  -->
        <parameter>
     <name>username</name>
     <value>sa</value>
     </parameter>
     <parameter>
     <name>password</name>
     <value>sunwei</value>
     </parameter>
     </ResourceParams>
      

  4.   

    恩,我看了你上面的写法,基本是一样的啊,就是驱动类不同而已,你的那个是mssqlserver的吧,另外你给的那个参考的配置很好,我看了确定了我的一些想法,但是任然行不通啊,因为昨天我已经把几乎所有版本的oracle驱动全部丢到tomcat下的lib文件夹中了,多放应该不会出问题吧,任然报上面那个错,呵呵,谢谢你的回帖啊!!
      

  5.   

    确实,手头机器没有安装Oracle,也没法帮兄弟测试,但是我个人觉得原理应该是一样的
      

  6.   

    我也纳闷呢,之前配置过sql2000,mysql的,均未出问题,对比之下也没什么不同,但就报这个错,对于 Cannot create JDBC driver of class '' for connect URL 'jdbc:oracle:thin:@localhost:1521:ketty' 这个问题网上也没有个明确的答案,基本都是说什么这配错那配错的。谢啦