java.sql.SQLException: индекс параметра вне диапазона (1> число параметров, которое является 0).Я получил эту ошибку - PullRequest
0 голосов
/ 07 марта 2019

Я попытался найти данные в базах данных mysql, но получил эту ошибку:

java.sql.SQLException: индекс параметра вне диапазона (1> количество параметров, равное 0).

main.jsp:

<form action = "SearchCheck" method="post">      
    <input type="text" id="search" class="fadeIn fourth" name="search" placeholder="search">
    <input type="submit" class="fadeIn fourth" value="Search">
</form>

SearchCheck.java:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    response.getWriter().append("Served at: ").append(request.getContextPath());
}

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    request.setCharacterEncoding("EUC-KR");     
    response.setContentType("text/html; charset=euc-kr");
    userSearch=request.getParameter("search");

    if(userSearch == null || userSearch =="" ) {

        PrintWriter out = response.getWriter();
        out.println("<script type=\"text/javascript\">");
        out.println("alert('이름을 채워주십시오');");
        out.println("location='main.jsp';");
        out.println("</script>");

    }


    else {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/member", "root", "Wlsdud1964");                         
            String sql = "SELECT * FROM  user where userName LIKE '%"+userSearch+"%'";              
            System.out.println(sql);        
            ps = conn.prepareStatement(sql);            
            ps.setString(1, userName);
            resultSet = ps.executeQuery();

            //response.sendRedirect("loginCheckResult.jsp");

            while(resultSet.next()) {               
                resultSet.getString(userName);
                resultSet.getString(userGroup);
                PrintWriter out = response.getWriter();
                out.println(resultSet.getString(userName) + resultSet.getString(userGroup));
                out.println("<br /");       
            }           
        } catch(Exception e) {
            e.printStackTrace();
        } finally{
            try {
                if(stmt != null)stmt.close();
                if(conn != null)conn.close();
            }catch(Exception e) {
                e.printStackTrace();
            }
        }   
    }//else     
} //doPost

Ответы [ 2 ]

1 голос
/ 07 марта 2019

Тахир был почти прав в своем ответе, правильный запрос SQL должен быть

String sql = "SELECT * FROM  user where userName LIKE ?";

и затем вы должны добавить % подстановочные знаки к параметру "вручную", т.е.

String queryString = "%" + userSearch + "%";
ps.setString(1, queryString);
0 голосов
/ 07 марта 2019

РЕДАКТИРОВАТЬ: Как упоминал Юзеф в одном ответе,?не следует помещать между строковым литералом "%?%", поэтому добавьте% к строковому параметру, прежде чем он будет задан в запросе. В вашем sql-запросе нет параметра ...

замените запрос на

String sql = "SELECT * FROM  user where userName LIKE ?"

?это параметр, где будет установлена ​​ваша строка.
где строка будет выглядеть как "%"+inputString+"%";

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...