JHsssss
2016-11-11 17:26
已经排查了一小时了,实在是找不出毛病了,一查询就错,Parameter index out of range (1 > number of parameters, which is 0).我看也没少问号啊
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
try {
req.setCharacterEncoding("UTF-8");
String command = req.getParameter("command");
String description = req.getParameter("description");
req.setAttribute("command", command);
req.setAttribute("description", description);
System.out.println(command+description);
Class.forName("com.mysql.jdbc.Driver");
Connection ct = DriverManager.getConnection("jdbc:mysql:///wechat?useUnicode=true&characterEncoding=UTF-8",
"root", "qxqx");
StringBuilder sql = new StringBuilder(
"select ID,COMMAND,DESCRIPTION,CONTENT from message where 1=1 ");
PreparedStatement ps = ct.prepareStatement(sql.toString());
List<String> paramList = new ArrayList<String>();
if (command != null && !"".equals(command.trim())) {
sql.append(" and COMMAND='?' ");
paramList.add(command);
}
if (description != null && !"".equals(description.trim())) {
sql.append(" and DESCRIPTION like '%' ? '%' ");
paramList.add(description);
}
for (int i = 0; i < paramList.size(); i++) {
ps.setString(i + 1, paramList.get(i));
}
System.out.println(ps.toString());
ResultSet rs = ps.executeQuery();
List<Message> messageList = new ArrayList<Message>();
while (rs.next()) {
Message message = new Message();
// 容器里加入的都是引用,不是对象本身,所以后续的set方法依然有用
messageList.add(message);
message.setId(rs.getString("ID"));
message.setCommand(rs.getString("COMMAND"));
message.setDescription(rs.getString("DESCRIPTION"));
message.setContent(rs.getString("CONTENT"));
}
req.setAttribute("messageList", messageList);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
req.getRequestDispatcher("/WEB-INF/jsp/back/list.jsp").forward(req,
resp);
}还有一个小问题,为什么doPost()方法用super.doGet(req,resp)会出现405错误,用doPost(req,resp)就可以了
==============================分割线===========================================
第一个问题解决了,把PreparedStatement ps = ct.prepareStatement(sql.toString());放到for循环前一行
查询就出错? 是查询全部的数据出错,还是查询 command 指令出错,如果是 第一个,我没看出什么毛病,如果是第二个,你在 20 、 24 打个断点,我怀疑是 paramList.size() 出了问题 , paramList 数据未添加进去 ! 查询下数据,断点查看下你的 sql 语句是否出现问题! 还有最主要: PreparedStatement ps = ct.prepareStatement(sql.toString()); 你放错了位置,是放在paramList 添加参数后面的!
sql.append(" and COMMAND='?' ");
?问号不要加'' 单引号
通过自动回复机器人学Mybatis---基础版
107417 学习 · 831 问题
相似问题