確定和老師的代碼一樣,但是報錯
已經排查了一小時了,實在是找不出毛病了,一查詢就錯,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循環前一行
2016-11-12
查詢就出錯? 是查詢全部的數據出錯,還是查詢 ?command ?指令出錯,如果是 第一個,我沒看出什么毛病,如果是第二個,你在 20 、 24 打個斷點,我懷疑是?paramList.size() 出了問題 , paramList 數據未添加進去 ! 查詢下數據,斷點查看下你的 sql 語句是否出現問題! ?還有最主要: ??PreparedStatement?ps?=?ct.prepareStatement(sql.toString()); ? 你放錯了位置,是放在paramList 添加參數后面的!
2016-12-11
sql.append("?and?COMMAND='?'?");
?問號不要加'' 單引號