Я передал значение в сервлет с помощью сеанса. Затем присвойте значение переменной "ms". теперь я хочу выбрать данные, используя эту переменную, с предложением where. Но это не работает.
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
HttpSession ses=request.getSession(false);
String ms = ses.getAttribute("ma").toString();
try {
dbconn = new DatabaseConnection();
conn = dbconn.setConnection();
stmt = conn.createStatement();
query = "select * from person where Email ="+ms;
res = dbconn.getResult(query, conn);
while(res.next()){
lst.add(res.getString("Username"));
lst.add(res.getString("Title"));
lst.add(res.getString("Fname"));
lst.add(res.getString("Lname"));
}
res.close();
}catch(Exception e){
RequestDispatcher rd =request.getRequestDispatcher("myAccount.jsp");
rd.forward(request, response);
}finally{
request.setAttribute("EmpData", lst);
RequestDispatcher rd =request.getRequestDispatcher("myAccount.jsp");
rd.forward(request, response);
lst.clear();
out.close();
}
Это ваш запрос вызывает исключение. Вместо
query = "select * from person where Email ="+ms;
Вы должны указать параметр электронной почты.
query = "select * from person where Email ='"+ms+"'";
Но ваш код уязвим для SQL-инъекции. Для этого лучше использовать PreparedStatement
.
Кстати, также лучше распечатать трассировку стека в разделе catch
, вы можете определить, что именно происходит неправильно.
String ms = ses.getAttribute("ma").toString();
имеет какое-то значение или нет? если оно имеет значение, то вы должны использовать подготовленный оператор, оператор PreparedStatement = connection.prepareStatement («выберите * от лица, где Email =?») `и сопоставьте?
значение как этоstatement.setString(1, ms);