<%
String check[]=request.getParameterValues("check");
String ck="";
for(int i=0;i<check.length;i++)
{
ck=ck+check[i]+",";
}
ck=ck.substring(0,ck.length()-1);
String spath="jcdg/jcdg.mdb";
String dbpath=application.getRealPath(spath);
String url="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="+dbpath;
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn=DriverManager.getConnection(url);
Statement stmt=conn.createStatement();
String sql="select * from kucun where BookId in('"+ck+"')";
ResultSet rs=stmt.executeQuery(sql);
out.print("<table border>");
  out.print("<tr>");
  out.print("<th width=100>图书编号</th>");
    out.print("<th width=180>图书名称</th>");
  out.print("<th width=50>图书价格</th>");
out.print("<th width=80>作者</th>");
out.print("<th width=150>出版社</th>");
out.print("<th width=60>是否选择</th>");
out.print("</tr>");
while(rs.next())
{
String a,b,c,d,e;
out.print("<tr>"); 
  a=rs.getString(1);               
out.print("<td>"+a+"</td>");
b=rs.getString(2);
out.print("<td>"+b+"</td>");
c=rs.getString(3);
out.print("<td>"+c+"</td>");
d=rs.getString(4);               
out.print("<td>"+d+"</td>");
e=rs.getString(5);               
out.print("<td>"+e+"</td>");
out.print("</tr>");
}
conn.close();
%>
用的access数据库,check是复选框的名称,values是数据表的主键BookId,表中还有图书名称,价格等其他内容,如果只选中一个复选框,那么这段程序可正确运行,但是选择一个以上的复选框后,页面上就不会显示任何东西,这事怎么回事,是不是sql语句有问题,或是输出方式不对,请赐教啊啊啊,只有25分了 

解决方案 »

  1.   

    String sql="select * from kucun where BookId in('"+ck+"')";   该语句中的ck缺少单引号啊!!
          eg :  select * from kucun where BookId in ('value1','value2','value3');
      

  2.   

    ls正解
    你通过request传过来都是数组了,而sql用in 是需要单引号滴:
    根据你String sql="select * from kucun where BookId in('"+ck+"')"  ;如果多选那假设的数组String []check={"aaa","bbb","ccc"};你的sql值就是select * from kucun where BookId in(‘aaa,bbb,ccc’);
    可以改两个地方
    for(int i=0;i<check.length;i++)
    {
    ck+=("'"+check[i]+"',");
    }
    String sql="select * from kucun where BookId in("+ck+")";即可。