【问题标题】:unable to use session data in select query无法在选择查询中使用会话数据
【发布时间】:2018-03-13 09:43:38
【问题描述】:

我试图显示已登录用户的数据。 我使用会话来识别用户。当我在选择查询中使用会话数据来获取该用户的详细信息时,它显示为空。 并且控制台中的消息中有错误

参数索引超出范围(1>参数个数,即0)。

谁能告诉我哪里做错了,这样我就可以解决这个问题并让它发挥作用。 谢谢。

显示.java

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


@WebServlet("/display")
public class display extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private String uname;


    public void doGet(HttpServletRequest request,HttpServletResponse response) 
            throws IOException,ServletException{
                processRequset (request,response);
            }

            public void doPost(HttpServletRequest request, HttpServletResponse response)
                    throws ServletException, IOException {

                processRequset (request,response);
            }

            public void processRequset(HttpServletRequest request,HttpServletResponse response) 
                    throws IOException,ServletException{
                response.setContentType("text/html;charset=UTF-8");
                PrintWriter out = response.getWriter();
                 HttpSession session=request.getSession(false);  
                    if(session!=null){  
                    String name=(String)session.getAttribute("uname");  
                    out.print("Hello, "+name+" ");  
        try {
            response.setContentType("text/html;charset=UTF-8");

            Class.forName("com.mysql.jdbc.Driver");  
            Connection con=DriverManager.getConnection(  
            "jdbc:mysql://localhost:3306/register","root","toor"); 


            PreparedStatement pstmt=con.prepareStatement(  
            "select * from headwy where uname='"+ name +"'" ); 
            out.print("Hello, "+uname+" ");
             pstmt.setString(1,uname);
            ResultSet rs = pstmt.executeQuery(); 
            out.println("<html><body><table BORDER=\"10\" WIDTH=\"50%\" bordercolor = \"green\"  CELLPADDING=\"8\"  CELLSPACING=\"3\"   ALIGN=\"CENTER\"  ><tr><td>phone</td><td>unamr</td><td>pass</td></tr>");
            while(rs.next())
            {
            out.println("<tr>  <td>"+rs.getString(1)+"</td>    <td>"+rs.getString(2)+"</td><td>"+rs.getString(3)+"</td></tr>");


            }

            out.println("</table></body></html>");
        }
          catch (Exception e2) {System.out.println(e2);
           }  

    }
                    else{  
                        out.print("Please login first");  
                        request.getRequestDispatcher("login.html").include(request, response);  
                    } 
}
}

【问题讨论】:

    标签: java mysql servlets


    【解决方案1】:

    如果使用准备好的语句,则需要为语句参数放置一个占位符:

    PreparedStatement pstmt = con.prepareStatement(  
            "select * from headwy where uname=?");
    pstmt.setString(1, name);
    

    【讨论】:

    • 它只显示一个空表。
    • 这里没有人有义务解决您的问题,伙计。你必须学会​​帮助自己。就目前而言,您的问题格式不正确,而且范围太广。您问题中唯一可行的事情是参数错误消息,我解决了这个问题。您的参数是否得到正确处理?如果直接在数据库上执行,您的查询会返回结果吗?这些都是我们在您的代码中看不到的东西。稍微调试一下,您就可以自己解决这个问题,或者提供足够的信息让其他人帮助您。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-18
    相关资源
    最近更新 更多