2016-07-05 2 views
0

Я принимаю username, column name и new entry для обновления от пользователя в jsp. Я пытаюсь обновить таблицу базы данных SQL, используя теги jstl, а также показать обновленную таблицу. Страница jsp не открывается, она дает сообщение синтаксической ошибки в моем обновленном sql-запросе.Ошибка синтаксиса sql (с использованием тегов jstl)

моя страница JSP: -

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<%@ page import="java.io.*,java.util.*,java.sql.*"%> 
<%@ page import="javax.servlet.http.*,javax.servlet.*" %> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%> 
<!DOCTYPE html> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <title>Found page</title> 
    <style> 
     a:link, a:visited { 
      background-color:darkolivegreen; 
      color: white; 
      padding: 10px 25px; 
      text-align: center; 
      width:100px; 
      text-decoration: none; 
      display: inline-block; 
      border-radius:20px; 
     } 


     a:hover, a:active { 
      background-color: lightgreen; 
     } 
     header { 
      background-color:teal; 
      color:white; 
      text-align:center; 
      padding:5px; 
     } 
     #file { 
      font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; 
      border-collapse: collapse; 
      width: 100%; 

     } 

     #file td, #file th { 
      border: 2px solid black; 
      text-align: left; 
      padding: 8px;     
     }    

     #file tr:hover {background-color: #ddd;} 

     #file th { 
      padding-top: 12px; 
      padding-bottom: 12px; 
      background-color: lightslategray; 
      color: white; 
     } 
     section { 
      height:270px; 
      width:1050px; 
      float:right; 
      padding:87px; 
     } 
     footer { 
      background-color:black; 
      float:bottom; 
      color:white; 
      clear:both; 
      text-align:center; 
      padding:5px; 
     } 
    </style> 
</head> 
<body style="background-color:lightsteelblue;"> 
    <% 
     String userName = null; 
     String sessionID = null; 
     Cookie[] cookies = request.getCookies(); 
     if (cookies != null) { 
      for (Cookie cookie : cookies) { 
       if (cookie.getName().equals("user")) { 
        userName = cookie.getValue(); 
       } 
      } 
     } 
    %> 
    <header> 
     <h1>File Tracking System</h1> 
     <div><span style="float:right">Hi <%=userName%></span></div> 
     <br> 
     <form style="float:right" action=" LogoutServlet" method="post"> 
      <input type="submit" value="Logout" > 
     </form> 
     <br> 
    </header> 
    <br> 
    <a href="file.jsp">1.Insert New File</a>   
    <a href="fileStatus.jsp">2.Change File Status</a> 
    <a href="found.jsp">3.Search your File</a> 
    <a href="checkstatus.jsp">4.Check File Status</a> 
    <br> 
    <br> 
    <form method="POST"> 
     User ID:<br><input type="text" name="user" value="" size="20" /> 

Эти опции в списке правописание же, как и мое имя столбца в таблице UserDetails

 Alter:<br><select name="use"> 
      <option>userName</option> 
      <option>password</option> 
      <option>role</option> 
      <option>firstname</option> 
      <option>lastname</option> 
      <option>departmentname</option> 
      <option>email</option> 
      <option>mobile</option> 
     </select> 
     New Entry:<br><input type="text" name="enter" value="" size="20" /> 
     <input type="submit" value="submit" name="submit" /> 
    </form> 
    <br> 
    <section> 
     <sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver" 
          url="jdbc:mysql://localhost/login" 
          user="root" password="root"/> 

udate SQL query-

Он находится в форма (update table_name set table_column = "xyz" где column_name = "abc";)

 <sql:update dataSource="${snapshot}" var="result"> 
      update usertable set "${param.use}"="${param.enter}" where username="${param.user}"; 
     </sql:update> 
     <sql:query dataSource="${snapshot}" var="result"> 
      select * from usertable where username="${param.user}"; 
     </sql:query> 

     <table id="file"> 
      <tr> 
       <th>UserName</th> 
       <th>Password</th> 
       <th>Role</th> 
       <th>First Name</th> 
       <th>Last Name</th> 
       <th>Department Name</th> 
       <th>Email</th> 
       <th>Mobile Number</th> 
      </tr> 
      <c:forEach var="row" items="${result.rows}"> 
       <tr> 
        <td><c:out value="${row.username}"/></td> 
        <td><c:out value="${row.password}"/></td> 
        <td><c:out value="${row.role}"/></td> 
        <td><c:out value="${row.firstname}"/></td> 
        <td><c:out value="${row.lasttname}"/></td> 
        <td><c:out value="${row.departmentname}"/></td> 
        <td><c:out value="${row.email}"/></td> 
        <td><c:out value="${row.mobile}"/></td> 
       </tr> 
      </c:forEach> 
     </table> 
    </section> 
    <footer> 
     Copyright 2016 NSIC. All right reserved.        
    </footer> 
</body> 
</html> 

Какой должен быть правильный синтаксис для sql? Есть ли другой способ, которым я мог бы это сделать? Я использовал альтернативный способ, когда я отправляю значения в alter.jsp и получаю их в сервлете changeServlet.java, но он не показывает никаких ошибок и не перенаправляется нигде, где он просто открывается http://localhost:8080/test9/changeServlet и застревает здесь, показывая белую пустую страницу.

package bean; 

import java.io.IOException; 
import java.io.PrintWriter; 
import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.SQLException; 
import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.http.Cookie; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 

public class changeServlet extends HttpServlet { 

@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    //request.getRequestDispatcher("link.html").include(request, response); 
    Cookie[] cookies = request.getCookies(); 
    if(cookies != null){ 
    for(Cookie cookie : cookies){ 
     if(cookie.getName().equals("JSESSIONID")){ 
      System.out.println("JSESSIONID="+cookie.getValue()); 
      break; 
     } 
    } 
    }  
    HttpSession session = request.getSession(false); 
    System.out.println("admin="+session.getAttribute("admin")); 
    if(session!=null && session.getAttribute("admin") != null){ 
       String admin=(String)session.getAttribute("admin"); 
       boolean status=false; 
    try{ 
     String user=request.getParameter("user"); 
     String column=request.getParameter("column"); 
     String data=request.getParameter("data");    
     boolean checkc=checkchar.value(column); 
     boolean checkp=checkchar.value(data); 

, если заявление является проверкой для любого неправильного ввода или нулевого значения, если представить неправильную запись он перенаправляет на entry.jsp. Это означает, что он работает до сих пор, но после этого не работает.

 if(checkc==true&&checkp==true) { 
     Connection con=ConnectionProvider.getCon(); 
     String sql="update usertable set '"+column+"'='"+data+"' where username='"+user+"'"; 
     PreparedStatement pstmt =con.prepareStatement(sql); 

     int rs=pstmt.executeUpdate(); 
     if(rs>0){status=true;} 

      if(status){ 
        PrintWriter out= response.getWriter(); 
        out.print("data updated,"+admin); 
        response.sendRedirect("updated.jsp"); 
         } 
       else 
       { 
        PrintWriter out= response.getWriter(); 
        out.print("failed to update"); 
        response.sendRedirect("notinsert.jsp"); 
       } 
      } 
     else{response.sendRedirect("entry.jsp");} 
      }catch(SQLException e){} 
       }else{ 
    RequestDispatcher rd = getServletContext().getRequestDispatcher("/index.html"); 
    PrintWriter out= response.getWriter(); 
    out.println("<font color=red>Either user name or password is wrong.</font>"); 
    rd.include(request, response); 
    } 
} 
} 
+0

Добавить одиночные кавычки arround значения char – Jens

+0

Вы имеете в виду это ------ update usertable set '$ {param.use}' = '{param.enter}' где username = '$ {param.user} '; –

+0

Не работает –

ответ

2

Ваш запрос не будет работать, пока эти вещи не изменяются:

  1. ваш вариант тега

    <option value="userName">userName</option> <option value="password">password</option> <option value="role">role</option> <option value="firstname">firstname</option> <option value="lastname">lastname</option> <option value="department">departmentname</option> <option value="email">email</option> <option value="mobile">mobile</option>

  2. Вы непосредственно стреляя запрос на одной странице, то есть, вы отобразили этот флажок, и сразу после него ваш запрос будет обновлен.

это вызывает проблемы, потому что JSTL всегда работает на первой стороне сервера, так что не имеет значения, где вы пишете, то он будет выполнен первый, в настоящее время при выполнении этого запроса, JSTL основывает, что параметры равны нулю, поэтому Теперь запрос становится чем-то вроде this.:-

Update table-name set null=null where user-name=null;

вы можете увидеть в столбце имя-null=null само по себе является нуль, можно считать для null значений, но ваше имя столбца тоже null, и что не существуют в базе данных или таблице.

поэтому, пожалуйста, сделайте это на двух страницах jsp, которые будут собирать информацию и передавать их как параметр на другую страницу jsp, теперь эта страница должна содержать запрос, теперь она может правильно получить значение параметра в запросе.

+0

В приведенном выше коде я дал альтернативный метод передачи значений из jsp и использования тогда в сервлетах есть некоторая ошибка в нем, вы могли бы это проверить. –

+0

Да, в вашем коде есть ошибка. форма, которую вы отправляете, не устанавливает какой-либо параметр для определения того, куда идти в сервлетах, а также, если я не ошибаюсь, тогда вы можете получать значения параметров как исключение в виде null или null (при использовании этого нулевого параметра в запросе.). Ошибка (на самом деле ошибка, но ошибка) находится на отметке

, задайте действие, чтобы указать, куда идти и что делать. –

Смежные вопросы