以下是ListServlet的代码:
package com.vitas;
import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;public class ListServlet extends HttpServlet
{

private String url;
private String driver;

public void init()throws ServletException
{

driver = "sun.jdbc.odbc.JdbcOdbcDriver";
url = "jdbc:odbc:test";
try
{
Class.forName(driver);
}catch(ClassNotFoundException e)
{
throw new UnavailableException("加载数据库失败");
}
}



public void doGet(HttpServletRequest req,HttpServletResponse res)throws ServletException,IOException
{

Connection con = null;
Statement st = null;
ResultSet rs = null;
req.setCharacterEncoding("gb2312");
String condition = req.getParameter("cond");

if(null == condition||condition.equals(""))
{
res.sendRedirect("search.html");
return;
}
res.setContentType("text/html;charset=gb2312");
PrintWriter out = res.getWriter();
try
{
con = DriverManager.getConnection(url);
st = con.createStatement();
if(condition.equals("all"))
{
rs = st.executeQuery("select * from bookinfo");
printBookInfo(out,rs);
out.close();
}
else if(condition.equals("precision"))
{
String title = req.getParameter("title");
String author = req.getParameter("author");
String bookconcern = req.getParameter("bookconcern");

if((null == title || title.equals(""))&&(null == author || author.equals(""))&&(null == bookconcern || bookconcern.equals("")))
{
res.sendRedirect("search.html");
return;
}

StringBuffer sb = new StringBuffer("select * from bookinfo where");
boolean bFlag = false;
if(!title.equals(""))
{
sb.append("title ="+"'"+title+"'");
bFlag = true;
}
if(!author.equals(""))
{
if(bFlag)
{
sb.append("and author = "+"'"+author+"'");
}else
{
sb.append("author ="+"'"+author+"'");
bFlag = true;
}
}
if(!bookconcern.equals(""))
{
if(bFlag)
{
sb.append(" and bookconcern = "+"'"+bookconcern+"'");
}else
{
sb.append(" bookconcern = "+"'"+bookconcern+"'");

}
}
rs = st.executeQuery(sb.toString());
printBookInfo(out,rs);
out.close();

}else if(condition.equals("keyword"))
{
String keyword = req.getParameter("keyword");
if(null == keyword|| keyword.equals(""))
{
res.sendRedirect("search.html");
return;
}
String strSQL = "select *from bookinfo where title like '%"+keyword+"%'";

rs = st.executeQuery(strSQL);
printBookInfo(out,rs);
out.close();
}
else
{
res.sendRedirect("search.html");
return;
}

}catch(SQLException se)
{
se.printStackTrace();
}
finally
{
if(rs!=null)
{
try{
rs.close();
}catch(SQLException se)
{
se.printStackTrace();
}
rs = null;
}
if(st!=null)
{
try{
st.close();
}catch(SQLException se)
{
se.printStackTrace();
}
st = null;
}
if(con!=null)
{
try{
con.close();
}catch(SQLException se){
se.printStackTrace();
}
con = null;
}
}
}

public void doPost(HttpServletRequest req,HttpServletResponse res)throws ServletException,IOException
{
doGet(req,res);
}

private void printBookInfo(PrintWriter out,ResultSet rs)throws SQLException 
{
out.println("<html><head>");
out.println("<title>图书信息</title>");
out.println("</head><body>");
out.println("<table border=1><caption>图书信息</caption><tr><th>书名</th><th>作者</th><th>出版社</th><th>价格</th><th>发行日期</th></tr>");
while(rs.next())
{
out.println("<tr><td>"+rs.getString("title")+"</td>");
out.println("<td>"+rs.getString("author")+"</td>");
out.println("<td>"+rs.getString("bookconcern")+"</td>");
out.println("<td>"+rs.getFloat("price")+"</td>");
out.println("<td>"+rs.getDate("publish_date")+"</td>");
out.println("</tr>");

}
out.println("</table></body></html>");
}
}
以下是CreateDBServlet代码:
package com.vitas;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;public class CreateDBServlet extends HttpServlet{


private String url;
private String driver;
public void init()throws ServletException
{
driver = "sun.jdbc.odbc.JdbcOdbcDriver";
url = "jdbc:odbc:test";

try
{
Class.forName(driver);
}catch(ClassNotFoundException ce)
{
throw new UnavailableException("加载数据驱动失败");
}
}

public void doGet(HttpServletRequest req,HttpServletResponse res)throws ServletException,IOException
{
Connection con = null;
Statement st = null;
try{

con = DriverManager.getConnection(url);
st = con.createStatement();
st.executeUpdate("use book create table bookinfo(id int not null primary key,title varchar(50) not null,author varchar(50) not null,bookconcern varchar(100) not null,publish_date smalldatetime not null,price float not null,amount smallint,re varchar(200))");


PrintWriter out = res.getWriter();
out.println("sucecss");
out.close();



st.executeUpdate("insert into bookinfo values(1,'JAVA 从入门到精通','张三','张三出版社','2004-10-1',34.00,35,null)");
st.executeUpdate("insert into bookinfo values(2,'JSP深入编程','李四','李四出版社','2005-10-1',56.00,20,null)");
st.executeUpdate("insert into bookinfo values(3,'J2ee高级编程','王五','王五出版社','2006-10-1',78.00,10,null)");



}catch(SQLException se)
{
se.printStackTrace();
}
finally
{
if(st != null)
{
try
{
st.close();
}catch(SQLException se)
{
se.printStackTrace();
}
st = null;
}
if(con != null)
{
try
{
con.close();
}catch(SQLException se)
{
se.printStackTrace();
}
con = null;
}
}
}
}以下是search.html<html>
<head>
<title>网上书店</title>
<script language=javascript>
function fsubmit()
{
if(searchForm.rcond[0].checked)
{
searchForm.action="list?cond=all"
}else if(searchForm.rcond[1].checked)
{searchForm.action= "list?cond=precision"
}
else if(searchForm.rcond[2].checked){
searchForm.action= "list?cond=keyword"
}
}
function hideall()
{
if(searchForm.rcond[0].checked)
{
pre.style.display = "none";
key.style.display = "none";
}
}
function showpre()
{if(searchForm.rcond[1].checked){
pre.style.display = "";
key.style.display = "none";
}else {
pre.style.display="none";
}
}
function showkey()
{
if(searchForm.rcond[2].checked)
{key.style.display = "";
pre.style.display = "none";
}else {key.style.display = "none";}}
</script>
</head>
<body><form name="searchForm" action="" method="post" onClick="fsubmit()">
<input type="radio" name=rcond onClick="hideall()">查看所有图书<p>
<input type="radio" name=rcond onClick="showpre()" >精确搜索<p>
<table id=pre style="DISPLAY:none">
<tr>
<td>书名:</td>
<td><input type="text" name="title"></td>
</tr>
<tr>
<td>作者:</td>
<td><input type="text" name="author"></td>
</tr>
<tr>
<td>出版社:</td>
<td><input type="text" name="bookconcern"></td>
</tr>
</table><p>
<input type="radio" name="rcond" onClick="showkey()">关键字搜索<p>
<table id=key style="DISPLAY:none">
<tr>
<td>请输入关键字搜索 </td>
<td><input type="text" name="keyword"></td>
</tr>
</table><p>
<input type="reset" value="重新输入">
<input type="submit" value="搜索">
</form></body></html>

解决方案 »

  1.   


    以下是部署:<servlet>
             <servlet-name>create</servlet-name>
             <servlet-class>com.vitas.CreateDBServlet</servlet-class>
         </servlet>     <servlet-mapping>
              <servlet-name>create</servlet-name>
             <url-pattern>/create</url-pattern>
         </servlet-mapping>
        
        
        
                 <servlet>
             <servlet-name>ListServlet</servlet-name>
             <servlet-class>com.vitas.ListServlet</servlet-class>
         </servlet>     <servlet-mapping>
              <servlet-name>ListServlet</servlet-name>
             <url-pattern>/list</url-pattern>
         </servlet-mapping>
      

  2.   

    初步看了下java代码,发现点问题,楼主请先去检查一下:
    StringBuffer sb = new StringBuffer("select * from bookinfo where"); 
    boolean bFlag = false; 
    if(!title.equals("")) 

    sb.append("title ="+"'"+title+"'"); 
    bFlag = true; 
    } 这个首先是一个sql语句拼装时候很容易忽视的空格问题,你上面的拼装造成where和之后的条件之间没有空格。
    另外你遇到的2个问题,你可以在printBookInfo方法中打印些输出语句,以确定到底是没有查出多条记录,还是查处多条后,你处理方面的问题
      

  3.   

    第一个问题解决了,现在就是 查询只能够返回一条记录,真不知道哪里出错了..也照你的方法试过了,每次next()只能返回一条记录,或一个语句!
      

  4.   

    next()方法是返回一个记录呀
    所有的记录集是放在rs中的
    你只有每次去调用rs.next()才能得到一条记录
    比如你select出来10条记录,那你只有rs.next()10次,才能遍历出你要的结果
      

  5.   

    while(rs.next()) 
    { 这里生成的代码只有第一行的数据吗?