bookstore.jsp原代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%request.setCharacterEncoding("UTF-8"); %>
    <%@page import="java.util.*,database.*" %>
    <jsp:useBean id="bookDB" class="database.BookDB" scope="session"/>
<%@include file="head.html"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<table>
    <%for(ListIterator iter=bookDB.getBooks().listIterator();iter.hasNext();){
     BookDetails book=(BookDetails)iter.next();
     %>
     <tr>
      <td bgcolor="#ffffaa">
        <a href="bookdetails.jsp?bookId=<%=book.getBookId()%>">
         <b><%=book.getTitle()%>&nbsp;</b>
         </a>
         </td>
       <td bgcolor="#ffffaa" rowspan=2>
       <%=book.getPrice()%>元
       </td>
       <td bgcolor="#ffffaa" rowspan=2>
       <a href="bookcatalog.jsp?Add=<%=book.getBookId()%>">
       <b>&nbsp;加入购物车&nbsp;</b>
       </a>
       </td>
       </tr>
       
       <tr>
       <td bgcolor="#ffffff">
       &nbsp;&nbsp;作者:<em><%=book.getName()%>&nbsp;</em>
       </td>
       </tr>
       <%}%>
    </table>
 
</body>
</html>出错页面如下:HTTP Status 500 - --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException: Exception in JSP: /bookstore.jsp:1512: </head>
13: <body>
14: <table>
15:     <%for(ListIterator iter=bookDB.getBooks().listIterator();iter.hasNext();){
16:      BookDetails book=(BookDetails)iter.next();
17:      %>
18:      <tr>
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:504)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause javax.servlet.ServletException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]第 1 行: 'books' 附近有语法错误。
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:858)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791)
org.apache.jsp.bookstore_jsp._jspService(bookstore_jsp.java:133)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause database.BookNotFoundException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]第 1 行: 'books' 附近有语法错误。
database.BookDBAO.getBooks(BookDBAO.java:60)
database.BookDB.getBooks(BookDB.java:25)
org.apache.jsp.bookstore_jsp._jspService(bookstore_jsp.java:86)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.17 logs.数据库中的表名是books,jsp连接数据库已经测试过了,没有问题,不知道出错页面中的
javax.servlet.ServletException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]第 1 行: 'books' 附近有语法错误。
是什么意思?
望各位高手指点,谢谢大家~!

解决方案 »

  1.   

    类BookDBAO的原代码如下:package database;
    import java.sql.*;
    import java.util.*;
    public class BookDBAO {
    private ArrayList books;
    Connection con;

        public BookDBAO()throws Exception{
         try{
         Class.forName(Constans.dbdriver).newInstance();
         con=DriverManager.getConnection(Constans.dburl,Constans.username,Constans.password);
         }catch(Exception ex){
         throw new Exception("Couldn't open connection to database:"+ex.getMessage());
         }
        }
        public void remove(){
         try{
         con.close();
         }catch(SQLException ex){
         System.out.println(ex.getMessage());
         }
        }
        public List getBooks()throws BookNotFoundException{
         books=new ArrayList();
         try{
         String selectStatement="selcet id,name,title,price,onSale,year,descripton,inventory"+"from books";
         PreparedStatement prepStmt=con.prepareStatement(selectStatement);
         ResultSet rs=prepStmt.executeQuery();
        
         while(rs.next()){
         BookDetails bd=new BookDetails(rs.getString(1),rs.getString(2),rs.getString(3),rs.getFloat(4),rs.getBoolean(5),rs.getInt(6),rs.getString(7),rs.getInt(8));
        
         if(rs.getInt(8)>0){
         books.add(bd);
         }
         }
         prepStmt.close();
         }catch(SQLException ex){
         throw new BookNotFoundException(ex.getMessage());
         }
         Collections.sort(books);
         return books;
        }
        
        public BookDetails getBookDetails(String bookId)throws BookNotFoundException{
         try{
         String selectStatement="selcet id,name,title,price,onSale,year,description,inventory"+"from books where id=?";
         PreparedStatement prepStmt=con.prepareStatement(selectStatement);
         prepStmt.setString(1, bookId);
        
         ResultSet rs=prepStmt.executeQuery();
        
         if(rs.next()){
         BookDetails bd=new BookDetails(rs.getString(1),rs.getString(2),rs.getString(3),rs.getFloat(4),rs.getBoolean(5),rs.getInt(6),rs.getString(7),rs.getInt(8));
         prepStmt.close();
         return bd;
         }else{
         prepStmt.close();
             throw new BookNotFoundException("couldn't find book:"+bookId);
             
         }
         }catch(SQLException ex){
         System.err.println(ex.getMessage());
         throw new BookNotFoundException("couldn't find book:"+bookId+""+ex.getMessage());
        
         }
        }
        
        public void buyBooks(ShoppingCart cart)throws OrderException{
         Collection items=cart.getItems();
         Iterator i=items.iterator();
         try{
         con.setAutoCommit(false);
        
         while(i.hasNext()){
         ShoppingCartItem sci=(ShoppingCartItem)i.next();
         BookDetails bd=(BookDetails)sci.getItem();
         String id=bd.getBookId();
         int quantity=sci.getQuantity();
         buyBook(id,quantity);
         }
         con.commit();
         con.setAutoCommit(true);
         }catch(Exception ex){
         try{
         con.rollback();
         throw new OrderException("transaction failed:"+ex.getMessage());
        
         }catch(SQLException sqx){
         throw new OrderException("rollback failed:"+sqx.getMessage());
         }
         }
        
        }
        
        public void buyBook(String bookId,int quantity)throws OrderException{
         try{
         String selectStatement="select id,name,title,price,onSale,year,description,nventory"+"from books where id=?";
         PreparedStatement prepStmt=con.prepareStatement(selectStatement);
         prepStmt.setString(1,bookId);
        
         ResultSet rs=prepStmt.executeQuery();
        
         if(rs.next()){
         int inventory=rs.getInt(8);
         prepStmt.close();
        
         if((inventory-quantity)>=0){
         String updateStatement="update books set inventory=inventory-?where id=?";
         prepStmt=con.prepareStatement(updateStatement);
         prepStmt.setInt(1, quantity);
         prepStmt.setString(2, bookId);
         prepStmt.executeUpdate();
         prepStmt.close();
         }else{
         throw new OrderException("not enough of"+bookId+"in stock to comp;ete order.");
         }
         }
         }catch(Exception ex){
         throw new OrderException("couldn't purchase book:"+bookId+ex.getMessage());
         }
        }
    }
    其中BookNotFoundException和OrderException是自己定义的,类文件如下:
    package database;public class BookNotFoundException extends Exception {
     public BookNotFoundException() {
     
     }
     public BookNotFoundException(String msg) {
         super(msg);
     }
    }OrderException类似
      

  2.   

    sql语句有问题吧,是不是from 前缺少空格,我没仔细捉摸你代码,初步猜测一下!
      

  3.   

    打印出sql,在oracle执行一下,看能否执行成功!