使用动态java变量在jsp中删除一条语句中的多行
checkbox.jsp使用动态java变量在jsp中删除一条语句中的多行,java,sql,jsp,jdbc,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<
<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>
Java
.NET
PHP
C/C++
PERL
PERL
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) {
}
%>
当我只选择一个复选框时,该值将被删除,但不会使用多个复选框
有人能帮我吗?这样做吗
SELECT * FROM checkdata WHERE name IN(('"+vwarnid+"'))");
返回任何行?您在子句中的
应以
IN('Java','.NET','PHP')
但按照你的编码方式,结果是
IN('Java,.NET,PHP')
这显然是错误的
与具体问题无关,代码中有几个严重的问题。请清除..中的输入内容。将IN
子句与PreparedStatement
一起使用,如中所述。另外,将原始Java代码放入JSP文件中并不是真正推荐的做法。此外,忽略异常对于遇到麻烦的情况也没有多大帮助。另外,数据库资源应该是close()
d infinally
块。请详细说明您是否有任何错误?然后如何使其成为另一种方式只需替换”、“
by”、“
”。当我打印字符串时,我会在选中复选框后将其输出为Java'、.NET'、.PHP。替换它是有效的,但是我不理解逻辑。字符串必须是“Java”,“.NET”,“PHP”。那么我的程序是如何工作的呢?是的,但是您的SQL中已经有了开始和结尾的引号:)