站内搜索: 请输入搜索关键词

当前页面: 开发资料首页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()%>&nbsp;

</td>
<td bgcolor="#ffffaa" rowspan=2>
<%=book.getPrice()%>元
</td>
<td bgcolor="#ffffaa" rowspan=2>
">
&nbsp;加入购物车&nbsp;

</td>
</tr>

<tr>
<td bgcolor="#ffffff">
&nbsp;&nbsp;作者:<%=book.getName()%>&nbsp;
</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执行一下,看能否执行成功!


↑返回目录
前一篇: 怎么解决JDBC读ORACLE的乱码问题
后一篇: 求:java中所有取得站点路径的方法~~~~~~~jdk1.5~~~~~~~