輸入查詢條件會報參數(shù)索引超出范圍的錯誤
java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
兩個百分號之間加了空格,
控制臺打印的paramerList為??????是不是表示頁面的參數(shù)沒有傳過去?
package?servlet; import?java.io.IOException; import?java.sql.Connection; import?java.sql.DriverManager; import?java.sql.PreparedStatement; import?java.sql.ResultSet; import?java.sql.SQLException; import?java.util.ArrayList; import?java.util.List; import?javax.servlet.ServletException; import?javax.servlet.http.HttpServlet; import?javax.servlet.http.HttpServletRequest; import?javax.servlet.http.HttpServletResponse; import?bean.Message; /** ?*?@author?570 ?* ?*/ public?class?ListServlet?extends?HttpServlet?{ ????/** ?????*? ?????*/ ????private?static?final?long?serialVersionUID?=?1L; ????@Override ????protected?void?doGet(HttpServletRequest?req,?HttpServletResponse?resp)?throws?ServletException,?IOException?{ ???????? ????????try?{ ???????????? ????????????String?command?=?req.getParameter("command");//從頁面拿到參數(shù) ????????????String?description?=req.getParameter("description"); ???????????? ????????????Class.forName("com.mysql.jdbc.Driver"); ????????????Connection?conn?=?DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb?characterEncoding=utf8&useSSL=true","root","root"); ???????????? //????????????String?sql?="SELECT?ID,COMMAND,DESCRIPTION,CONTENT?FROM?imooc_mybatis_list"; ???????????? ????????????//where?1=1?用于語句拼接。。不明所以 ????????????StringBuilder?sql?=?new?StringBuilder("select?ID,COMMAND,DESCRIPTION,CONTENT?from?imooc_mybatis_list?where?1=1");? ???????????? ????????????PreparedStatement?ps?=?conn.prepareStatement(sql.toString()); //????????????PreparedStatement?ps?=?conn.prepareStatement(sql); ????????????//多條件查詢時,利用List做緩沖,保存查詢參數(shù),然后再循環(huán)賦值 ????????????List<String>?paramerList?=?new?ArrayList<String>(); ????????????//語句拼接如果查詢的指令非空且非空字符串則執(zhí)行語句拼接查詢 ????????????if?(command!=null&&!"".equals(command.trim()))?{ ????????????????sql.append("?and?COMMAND=??"); ????????????????paramerList.add(command); ????????????} ???????????? ????????????if?(description!=null&&!"".equals(description.trim()))?{ ????????????????sql.append("and?DESCRIPTION?like?'%'???'%'?"); ????????????????paramerList.add(description); ????????????} ????????????//把頁面上的語句拿給要送到數(shù)據(jù)庫查詢的ps中 ????????????for?(int?i?=?0;?i?<?paramerList.size();?i++)?{ ????????????????System.out.println(paramerList.get(i)); ????????????????ps.setString(i+1,?paramerList.get(i));//錯誤指向這一行 ????????????} ???????????? ????????????ResultSet?rs?=?ps.executeQuery(); ????????????List<Message>?messageList?=?new?ArrayList<Message>(); ???????????? ????????????while?(rs.next())?{ ????????????????Message?message?=?new?Message(); ????????????????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?(ClassNotFoundException?e)?{???????????? ????????????e.printStackTrace(); ????????}?catch?(SQLException?e)?{???????????? ????????????e.printStackTrace(); ????????}???????? ????????req.getRequestDispatcher("/WEB-INF/jsp/list.jsp").forward(req,?resp); ????} ???? ????@Override ????protected?void?doPost(HttpServletRequest?req,?HttpServletResponse?resp)?throws?ServletException,?IOException?{ ???????? ????????this.doGet(req,?resp); ????} ???? ???? }
2016-10-24
"?and?COMMAND=??" ? ? ?后面不要加空格
2016-10-17
你把req.setCharacterEncoding("UTF-8");這行代碼復(fù)制到你的第34行應(yīng)該是可以的
2016-09-12
出現(xiàn)了問號是編碼問題, 你在第35行加一下這個,設(shè)置編碼utf-8,試試看
req.setCharacterEncoding("UTF-8");