輸入查詢條件會報參數索引超出范圍的錯誤
java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
兩個百分號之間加了空格,
控制臺打印的paramerList為??????是不是表示頁面的參數沒有傳過去?
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");//從頁面拿到參數
????????????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做緩沖,保存查詢參數,然后再循環賦值
????????????List<String>?paramerList?=?new?ArrayList<String>();
????????????//語句拼接如果查詢的指令非空且非空字符串則執行語句拼接查詢
????????????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);
????????????}
????????????//把頁面上的語句拿給要送到數據庫查詢的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");這行代碼復制到你的第34行應該是可以的
2016-09-12
出現了問號是編碼問題, 你在第35行加一下這個,設置編碼utf-8,試試看
req.setCharacterEncoding("UTF-8");