確定和老師的代碼一樣,但是報錯
已經(jīng)排查了一小時了,實在是找不出毛病了,一查詢就錯,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(); //?容器里加入的都是引用,不是對象本身,所以后續(xù)的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)會出現(xiàn)405錯誤,用doPost(req,resp)就可以了
==============================分割線===========================================
第一個問題解決了,把PreparedStatement ps = ct.prepareStatement(sql.toString());放到for循環(huán)前一行
2016-11-12
查詢就出錯? 是查詢?nèi)康臄?shù)據(jù)出錯,還是查詢 ?command ?指令出錯,如果是 第一個,我沒看出什么毛病,如果是第二個,你在 20 、 24 打個斷點,我懷疑是?paramList.size() 出了問題 , paramList 數(shù)據(jù)未添加進(jìn)去 ! 查詢下數(shù)據(jù),斷點查看下你的 sql 語句是否出現(xiàn)問題! ?還有最主要: ??PreparedStatement?ps?=?ct.prepareStatement(sql.toString()); ? 你放錯了位置,是放在paramList 添加參數(shù)后面的!
2016-12-11
sql.append("?and?COMMAND='?'?");
?問號不要加'' 單引號