使用动态java变量在jsp中的一个语句中删除多行

时间:2011-03-21 06:59:07

标签: java sql jsp jdbc

checkbox.jsp

<form action="test.jsp">
    <input type="checkbox" name="id" value="Java"> Java<br>
    <input type="checkbox" name="id" value=".NET"> .NET<br>
    <input type="checkbox" name="id" value="PHP"> PHP<br>
    <input type="checkbox" name="id" value="C/C++"> C/C++<br>
    <input type="checkbox" name="id" value="PERL"> PERL <br>
    <input type="checkbox" name="id" value="vb SCRIPT"> PERL <br>
    <input type="submit" value="Submit">
</form>

test.jsp的

<% 
    String select[] = request.getParameterValues("id"); 

    if (select != null && select.length != 0) {
        out.println("You have selected: ");
        for (int i = 0; i < select.length; i++) {
            out.println(select[i]); 
        }
    }

    String selected="";
    StringBuffer sb = new StringBuffer(); 

    for(int i = 0; i < select.length; i++) {
        sb.append(select[i] + ",");
    }

    String vwarnid = sb.toString(); 
    vwarnid = vwarnid.substring(0, vwarnid.length()-1);
    out.print(vwarnid);

    try {
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        Connection c = DriverManager.getConnection("jdbc:odbc:Task","","");
        Statement st = c.createStatement();
        PreparedStatement pst = c.prepareStatement
            ("DELETE FROM checkdata WHERE name    IN('"+vwarnid +"')");
        int i=pst.executeUpdate();
        out.print(i);
        out.println("deleted");
    } catch(Exception e) {
    }
%>

当我只选择一个复选框时,该值将被删除,但不会选中多个复选框 任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

这是

吗?
SELECT * FROM checkdata WHERE name IN(('"+vwarnid+"'))");

返回任何行?

答案 1 :(得分:1)

您的IN子句最终应为

IN('Java','.NET','PHP')

但是你编码的方式,它最终为

IN('Java,.NET,PHP')

这显然是错误的。


与具体问题无关,您的代码中存在几个严重问题。请从SQL injection attacks清除您的输入。 Learn PreparedStatement。在this answer中概述了INPreparedStatement一起使用的条款。另外,将原始Java代码放在JSP文件中并不是推荐的做法。 Learn servlets。同样忽略异常对于遇到麻烦的情况也没有多大帮助。此外,数据库资源应在close()块中finally d。