当前页面: 开发资料首页 → JSP 专题 → 求助:一个jsp+javabean的问题
求助:一个jsp+javabean的问题
摘要: 求助:一个jsp+javabean的问题
bookstore.jsp原代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%request.setCharacterEncoding("UTF-8"); %>
<%@page import="java.util.*,database.*" %>
<%@include file="head.html"%>
HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<head>
Insert title here
</head>
<body>
<table>
<%for(ListIterator iter=bookDB.getBooks().listIterator();iter.hasNext();){
BookDetails book=(BookDetails)iter.next();
%>
<tr>
<td bgcolor="#ffffaa">
">
<%=book.getTitle()%>
</td>
<td bgcolor="#ffffaa" rowspan=2>
<%=book.getPrice()%>元
</td>
<td bgcolor="#ffffaa" rowspan=2>
">
加入购物车
</td>
</tr>
<tr>
<td bgcolor="#ffffff">
作者:<%=book.getName()%>
</td>
</tr>
<%}%>
</table>
</body>
出错页面如下:
HTTP Status 500 -
--------------------------------------------------------------------------------
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: Exception in JSP: /bookstore.jsp:15
12: </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' 附近有语法错误。
是什么意思?
望各位高手指点,谢谢大家~!
类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类似
sql语句有问题吧,是不是from 前缺少空格,我没仔细捉摸你代码,初步猜测一下!
打印出sql,在oracle执行一下,看能否执行成功!