我做了一个servlet的web小程序练手,但是数据库这一块始终出错,找不到原因,弄得我身心疲惫啊,请各位大神帮我看看啊.下面是web.xml的设置
<resource-ref>
        <description>DB Connection</description>
        <res-ref-name>jdbc/DBtest</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
  </resource-ref>下面是context.xml才设置
<!-- The contents of this file will be loaded for each web application -->
    <Context>
        <Resource name="jdbc/DBtest" auth="Container"
                         type="javax.sql.DataSource"
                         maxActive="30" maxIdle="10" maxWait="10000"
                         driverClassName="com.mysql.jdbc.Driver"
                        url="jdbc:mysql://localhost:3306/hsp"
                         username="root" password="root" />
        <WatchedResource>WEB-INF/web.xml</WatchedResource>
      </Context>
下面是连接数据库的代码:
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/hsp");
con = ds.getConnection();

}catch(Exception ex){
ex.printStackTrace();
}
     if(con == null){
      
      System.out.println("con is null!!!!!!!!!!!1");
     }
     System.out.println("datasource set over!");
 try{
     System.out.println("statement set!");  stm = con.createStatement();
 System.out.println("statement  set  over!");
 }catch(Exception ex){
 ex.printStackTrace();
 }
我发现con始终是空的,这让我蛋疼了,始终改不出来,求帮助啊!!

解决方案 »

  1.   

    错误是:javax.naming.NameNotFoundException: Name hsp is not bound in this Context
    at org.apache.naming.NamingContext.lookup(NamingContext.java:770)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:140)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:781)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:140)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:781)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:140)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:781)
    at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
    at org.apache.naming.SelectorContext.lookup(SelectorContext.java:137)
    at javax.naming.InitialContext.lookup(InitialContext.java:392)
    at dzy.model.UserBeanCL.setCon(UserBeanCL.java:17)
    at dzy.model.UserBeanCL.checkUser(UserBeanCL.java:55)
    at dzy.model.LoginCL.doPost(LoginCL.java:17)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    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:230)
    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:104)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)
    con is null!!!!!!!!!!!1
    datasource set over!
    statement set!
    java.lang.NullPointerException
    at dzy.model.UserBeanCL.setCon(UserBeanCL.java:31)
    at dzy.model.UserBeanCL.checkUser(UserBeanCL.java:55)
    at dzy.model.LoginCL.doPost(LoginCL.java:17)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    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:230)
    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:104)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)
      

  2.   

    你这里有两个文档
    第一,数据源你配置的名称是jdbc/DBtest 但是在程序里面你查找的却是java:comp/env/jdbc/hsp,需要改成java:comp/env/jdbc/DBtest第二,你需要确保将mysql的jdbc驱动包放到tomcat/lib 这个包下你这样处理一下,看看还有报错么 
      

  3.   

    DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/hsp");Resource name="jdbc/DBtest"明显不一致
      

  4.   

    但是我数据库的名字是hsp,而且改过来也不行啊
      

  5.   

    老师说
    <res-ref-name>jdbc/DBtest</res-ref-name>
    这个DBtest无所谓的,只要能和<Resource name="jdbc/DBtest"
    对上就行了
      

  6.   

    现在是这个问题了:
     Cannot load JDBC driver class 'com.mysql.jdbc.Driver'
    我在web-inf里的lib里放了mysql-connector-java-5.1了
    但是不行
      

  7.   

    你认真看看我给你在2楼的回帖,看帖都不认真……把你的mysql的jdbc驱动包放到 tomcat所在目录的lib目录下面 ,然后重新启动tomcat ,看看报什么错误
      

  8.   

    我用的是myeclipse开发的,之前刚学的时候把驱动包放进去了,可还是报这个错啊
      

  9.   

    我tomcat在C盘下面,我把驱动包放在  C:\apache-tomcat-6.0.33\lib  是这样吧
      

  10.   

    用myeclipse开发的话,,将jar放到web-inf/lib目录下,,还有你的mysql-connector-java-5.1.jar包看看是否正确版本是否一致,,,我的5.1的mysql用的jar包是mysql.jar,你那个jar我还没用过。。
      

  11.   

    本项目的webroot/web-inf/lib目录下。。
      

  12.   

    好久没有这样配置过数据源了。楼主可以参考一下:http://tomcat.apache.org/tomcat-5.5-doc/jndi-datasource-examples-howto.html
      

  13.   

    你Context中的名字 <Resource name="jdbc/DBtest",java代码名字是lookup("java:comp/env/jdbc/hsp")
    不一样