返回列表 回复 发帖

[求助] 来个 会JNDI的

第二次配JNDI   报了个让人疯狂了三小时的错误  麻烦高手给瞅瞅

大概功能就是 使用JNDI 获取 数据源

/*
* dong.jndi.GetDataBean.java
* 功能:使用JNDI获取数据源
*
*     Cannot create JDBC driver of class '' for connect URL 'jdbc:sqlserver://localhost:1433;DataBaseName=restrant'           数据库异常
*/
package dong.jndi;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;

// 导入使用JNDI和数据源所需要的包
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

import ch03.FoodBean;

public class GetDataBean {
        private Connection connection;

        private PreparedStatement titlesQuery;

        private ResultSet results;

        // 返回FoodBeans列表
        public List getFoods() {

                List foodsList = new ArrayList();

                // 获取餐品列表
                try {
                        // 用JNDI读取 tomcat安装目录/conf/context.xml文件中的数据源
                        Context ic = new InitialContext();
                        DataSource source = (DataSource) ic
                                        .lookup("java:comp/env/jdbc/restrant");

                        // 通过JNDI读取的数据源建立数据库连接
                        connection = source.getConnection();
                        titlesQuery = connection
                                        .prepareStatement("SELECT foodID, foodName, remark, "
                                                        + "foodPrice, description, foodImage "
                                                        + "FROM foodInfo ORDER BY foodID");
                        ResultSet results = titlesQuery.executeQuery();

                        // 读取行数据
                        while (results.next()) {
                                FoodBean food = new FoodBean();

                                food.setFoodId(results.getString("foodID"));
                                food.setFoodName(results.getString("foodName"));
                                food.setRemark(results.getString("remark"));
                                food.setFoodPrice(results.getDouble("foodPrice"));
                                food.setDescription(results.getString("description"));
                                food.setFoodImage(results.getString("foodImage"));

                                foodsList.add(food);
                        }
                }

                // 处理数据库异常
                catch (SQLException exception) {
                        System.out.println(exception.getMessage() +"           数据库异常");
                        exception.printStackTrace();
                }

                // 处理JNDI查找异常
                catch (NamingException namingException) {
                        System.out.println("JNDI    " + namingException.getMessage());
                        namingException.printStackTrace();
                }
                // 释放资源
                finally {
                        // 关闭结果集
                        try {
                                if (results != null) {
                                        results.close();
                                        results = null;
                                }
                                // 处理结果集关闭异常
                        } catch (SQLException e) {
                                e.printStackTrace();
                        }
                        // 关闭数据库连接
                        try {
                                if (connection != null && (!connection.isClosed())) {
                                        connection.close();
                                }
                                // 处理数据库连接关闭异常
                        } catch (SQLException sqlEx) {
                                sqlEx.printStackTrace();
                        }
                }
                return foodsList;

        }
}

Web-INF 下 web.xml  :
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
        xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <servlet>
    <description>描述</description>
    <display-name>显示的名字</display-name>
    <!-- servlet-name要与下面servlet-mapping下的servlet-name保持一致 -->
    <servlet-name>Welcome</servlet-name>
    <!-- servlet-class对应着servlet类文件在程序中的位置 -->
    <servlet-class>ch02.Welcome</servlet-class>
  </servlet>
  <servlet>
    <description>描述</description>
    <display-name>显示的名字</display-name>
    <servlet-name>AddFoodToCart</servlet-name>
    <servlet-class>ch03.AddFoodToCart</servlet-class>
  </servlet>
  <servlet>
    <description>描述</description>
    <display-name>显示的名字</display-name>
    <servlet-name>OrderServlet</servlet-name>
    <servlet-class>ch03.OrderServlet</servlet-class>
  </servlet>



  <servlet-mapping>
    <servlet-name>Welcome</servlet-name>
    <!-- url-pattern设定当前Servlet在浏览器运行的url -->
    <url-pattern>/Welcome</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>AddFoodToCart</servlet-name>
    <url-pattern>/servlet/AddFoodToCart</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>OrderServlet</servlet-name>
    <url-pattern>/servlet/OrderServlet</url-pattern>
  </servlet-mapping>
  
  <resource-ref>
          <res-ref-name>jdbc/restrant</res-ref-name>
          <res-type>javax.sql.DataSource</res-type>
         <res-auth>Container</res-auth>
  </resource-ref>
  
   <welcome-file-list>
    <welcome-file>/ch06/login.jsp</welcome-file>
  </welcome-file-list>
</web-app>

Tomcat 6.0  conf下   context.xml:
         <Resource name="jdbc/restrant"
        auth="Container" type="javax.sql.DataSource" maxActive="100" maxldle="30"
        maxWait="1000" username="sa" password="0123"
        diverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
        url="jdbc:sqlserver://localhost:1433;DataBaseName=restrant"/>

lib下 加  sql server 2005数据库驱动  正常

高手期待中。。。。。
异常 信息   :
Cannot create JDBC driver of class '' for connect URL 'jdbc:sqlserver://localhost:1433;DataBaseName=restrant'           数据库异常
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'jdbc:sqlserver://localhost:1433;DataBaseName=restrant'
        at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1150)
        at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
        at ch06.jndi.GetDataBean.getFoods(GetDataBean.java:45)
        at org.apache.jsp.ch06.show_jsp._jspService(show_jsp.java:62)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
        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.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)
        at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
        at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
        at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
        at ch02.Welcome.doGet(Welcome.java:52)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
        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: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:286)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        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:1143)
        ... 30 more
很离奇的 一个错误 八成是 软件又有问题了

答案是 :  driverClassName   少了个 r
返回列表