使用到的还是access数据库,采用不用配置数据源的方法连接access数据库,无需配置数据源的方法在上一篇随笔中有提到
首先是查询界面cha.jsp,接受两个变量,查询类别(condition)和查询的关键字(name)
<% @ page contentType = " text/html; charset=gb2312 " language = " java " import = " java.sql.* " errorPage = "" %>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html xmlns ="http://www.w3.org/1999/xhtml" >
< head >
< meta http-equiv ="Content-Type" content ="text/html; charset=gb2312" />
< title > 无标题文档 </ title >
</ head >
< body bgcolor ="cyan" >
< center >
< h1 > 请输入要查询的关键字 </ h1 >
< form action ="/test5/Book1" method ="post" >
请选择查询条件 < select name ="condition" >
< option > 作者 </ option >
< option selected ="selected" > 书名 </ option >
</ select >
请输入 < input type ="text" name ="name" />< br />
< input type ="submit" value ="提交" />
</ form >
</ body >
</ html >
之后是servlet部分,主要是检查查询的关键字是否为空
package test;
import javax.servlet. * ;
import javax.servlet.http. * ;
import java.io. * ;
public class Book1 extends HttpServlet
{
public void init(ServletConfig config) throws ServletException
{
super .init(config);
}
public void service(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
{
PrintWriter out = response.getWriter();
response.setContentType( " text/html;charset=gb2312 " );
String condition = request.getParameter( " condition " );
String name = request.getParameter( " name " );
if (name.equals( "" ))
{
response.sendRedirect( " cha.jsp " );
}
else
{
HttpSession session = request.getSession( true );
session.setAttribute( " condition " ,condition);
session.setAttribute( " name " ,name);
response.sendRedirect( " xian.jsp " );
}
}
public void destroy()
{
}
}
接下来是实现数据库查询功能的javabean类
package test;
import java.sql. * ;
import java.io. * ;
import java.util. * ;
public class BookCo
{
public String name,condition;
Connection con = null ;
String strurl = " jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=C:\\Program Files\\Apache Software Foundation\\tomcat 6.0\\webapps\\test5\\book.mdb " ;
Statement stmt = null ;
ResultSet rs = null ;
public BookCo()
{
name = "" ;
condition = "" ;
}
public void setKeyword(String s,String ss)
{
name = s;
condition = ss;
try
{
byte [] b = name.getBytes( " iso-8859-1 " );
name = new String(b);
byte [] bb = condition.getBytes( " iso-8859-1 " );
condition = new String(bb);
}
catch (Exception e){}
}
public ResultSet Boo()
{
String drivername = " sun.jdbc.odbc.JdbcOdbcDriver " ;
String sql = " select * from book " ;
try
{
Class.forName(drivername);
con = DriverManager.getConnection(strurl);
stmt = con.createStatement();
if (condition.equals( " 作者 " ))
{
sql = " select * from book where book_author=' " + name + " ' " ;
}
if (condition.equals( " 书名 " ))
{
sql = " select * from book where book_name=' " + name + " ' " ;
}
rs = stmt.executeQuery(sql);
}
catch (Exception e)
{
System.out.println( " connection fail " );
}
return rs;
}
}
最后是展示查询结果的jsp界面
<% @ page contentType = " text/html; charset=gb2312 " language = " java " import = " java.sql.* " errorPage = "" %>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html xmlns ="http://www.w3.org/1999/xhtml" >
< head >
< meta http-equiv ="Content-Type" content ="text/html; charset=gb2312" />
< title > 无标题文档 </ title >
</ head >
<% @ page import = " test.BookCo " %>
<% @ page import = " java.sql.* " %>
< body >
< jsp:useBean id ="Co" class ="test.BookCo" scope ="application" ></ jsp:useBean >
< center >
< h1 > 图书信息 </ h1 >
< table border ="1" width ="80%" >
< th > 书号 </ th >< th > 书名 </ th >< th > 作者 </ th >< th > 出版社 </ th >< th > 图书价格 </ th >< th > 出版日期 </ th >
<%
String name = ( String )session.getAttribute( " name " );
String condition = ( String )session.getAttribute( " condition " );
Co.setKeyword(name,condition);
// out.print(Co.name + Co.condition);
// out.print(Co.Boo());
ResultSet rs = Co.Boo();
while (rs.next())
{
out.print( " <tr><td> " + rs.getInt( 1 ) + " </td> " );
out.print( " <td> " + rs.getString( 2 ) + " </td> " );
out.print( " <td> " + rs.getString( 3 ) + " </td> " );
out.print( " <td> " + rs.getString( 4 ) + " </td> " );
out.print( " <td> " + rs.getInt( 5 ) + " </td> " );
out.print( " <td> " + rs.getString( 6 ) + " </td></tr> " );
}
rs.close();
%>
</ table >
</ center >
</ body >
</ html >
接下来的问题就是,如果我用<%=rs.getInt(1)%>来输出第一个字段的值时,会发生错误,我调试了很久也没有解决,
希望高手来帮我解决一下,谢谢
上面那个问题已经解决了,rs.getInt(1)这个函数是按顺序来取出数据库中的字段的,而且不能往回取,也就是只能取1次。
所以说如果<%=rs.getInt(1)%>这样的话。。前面out.print("<tr><td>"+rs.getInt(1)+"</td>");就不能写了,2个
只能选其一。