今天在写项目的过程中,有一个模块是做多选删除操作,通过servlet获得多选框的value组,然后执行sql操作。如下:
1 @RequestMapping( "/delteCouse.do" ) 2 public void delCouse( HttpServletRequest req, HttpServletResponse resp ) throws SQLException { 3 4 //处理中文 5 try { 6 req.setCharacterEncoding("UTF-8"); 7 } catch (UnsupportedEncodingException e) { 8 e.printStackTrace(); 9 } 10 resp.setContentType("text/html;charset=utf-8"); 11 12 //获取页面传来的值:选中的框的value 13 String courIndex[] = req.getParameterValues("couIndex"); 14 15 //根据选中的框的个数,动态生成同样个数的动态占位符 16 String number = null; 17 for (int j = 0; j < courIndex.length; j++) { 18 number +=",?"; 19 } 20 21 //SQL语句:添加动态生成的?占位符,满足用户的任意多选操作 22 String sqlString = "DELETE FROM courses WHERE course_id IN (" + number + ")"; 23 24 Connection con = myConnection.getConnection(); 25 PreparedStatement pStatement = con.prepareStatement(sqlString); 26 27 //动态设置占位符位置的值 28 for (int j = 0; j < courIndex.length; j++) { 29 pStatement.setString(j+1,courIndex[j]); 30 } 31 32 //执行SQL 33 pStatement.executeUpdate(); 34 //关闭链接 35 con.close(); 36 37 }
测试的时候发现,报500错误:Parameter index out of range(1 > number of parameters, which is 0),还以为存放value的数组和给占位符之间的索引不对应(占位?符从1开始,数组索引从0开始),然而检查了没有毛病,头就大了,检查很久发现是中英文问题!,我的占位问号是中文的!
修改:
我的天,哈哈,查别还是比较大的,但是不容易注意到啊,所以说经验真的重要了,有时候不是什么大难题,就是个没注意到的小问题~,
原文地址:https://www.cnblogs.com/ynhwl/p/9602007.html
时间: 2024-10-08 10:31:00