2016-06-12 20 views
0

Ниже приведена страница html, где пользователь вводит значения в поля. Затем эти поля переходят к сервлету, который вставляет эти значения в базу данных, где таблица называется «month_timesheet». Как вы можете видеть, два поля ввода в html требуют, чтобы пользователь вводил «Ежегодный отпуск» и «Больной отпуск». У меня есть другая таблица «leave_remaining» (не показана ниже), которая содержит поля, называемые «Оставшийся отпуск по болезни» и «Оставшийся годовой отпуск». Я хочу, чтобы, когда выполняется следующий сервлет, скажем, например, пользователь вводит «5» в поле, в котором говорится «Годовой отпуск». Я хочу, чтобы другая таблица «leave_remaining» вычитала 5 ежегодных листов и обновила эту таблицу. Помогите оценить, спасибо!Как вычесть значение из таблицы sql?

TimeSheet.html

<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset = "UTF-8"> 
     <link rel = "stylesheet" type = "text/css" href = "main.css"> 
     <link rel = "stylesheet" type = "text/css" href = "sidebar.css"> 
     <title>Maintain Time Sheet</title> 
     <style> 
      table { border-collapse: collapse; width: 50%; } th, td { text-align: left; padding: 8px; } tr:nth-child(even){background-color: #f2f2f2} 
      tr:hover {background-color: #e2f4ff;} 
     </style> 
    </head> 

    <body> 

     <ul> 

      <li><a href="PersonalInfoOutput">View Personal Information</a></li> 
      <li><a href="ExpenseClaim.html">View Expense Claims</a></li> 
      <li><a href=asdasd>View Payslips</a></li> 
      <li><a href="changePassAdmin.html">Change Password</a></li> 
      <li><a href="manageEmployee.html">Maintain Employee Information</a></li> 
      <li><a href=asdasdasd>Maintain Tax Information</a></li> 
      <li><a href=asdasd>Maintain Payroll Items</a></li> 
      <li><a class=active>Maintain Timesheet</a></li> 
      <li><a href=asda>Maintain Employee Expenses</a></li> 
      <li><a href=asda>Run Payroll</a></li> 
      <li><a href=asdasds>Generate Reports</a></li> 

     </ul> 

     <div style=margin-left:25%;padding:1px;> 
     </div> 

     <div id="container"> 
      <h1>Maintain Time Sheet</h1> 
      <form action ="TimeSheetDB" method = "post"> 

       <table border ="1"> 

        <tr> 
         <td>Employee ID: </td> 
         <td><input type = "text" name = "employee_id" pattern="[0-9]{4}" title="4 digit number: e.g. 1234" maxlength="4" required></td> 
        </tr> 

        <tr> 
         <td>Hours Worked: </td> 
         <td><input type = "number" name = "HoursWorked" min="0" step="0.01" required></td> 
        </tr> 

        <tr> 
         <td>Date: </td> 
         <td><input type = "date" name = "date" required></td> 
        </tr> 

        <tr> 
         <td>Annual Leaves Taken: </td> 
         <td><input type = "number" min="0" name = "ALeave" required></td> 
        </tr> 

        <tr> 
         <td>Sick Leaves Taken: </td> 
         <td><input type = "number" min="0" name = "SLeave" required></td> 
        </tr> 

       </table> 
       <br> 
       <br> 
       <input type = "submit" value = "Submit"> 
      </form> 
     </div> 
    </body> 

</html> 

TimeSheetDB.java

import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 
import java.sql.*; 

public class TimeSheetDB extends HttpServlet { 

    protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     response.setContentType("text/html;charset=UTF-8"); 
     PrintWriter out = response.getWriter(); 

     String employee_id = request.getParameter("employee_id"); 
     String hours = request.getParameter("HoursWorked"); 
     String date = request.getParameter("date"); 
     String ALeave = request.getParameter("ALeave"); 
     String SLeave = request.getParameter("SLeave"); 

     try { 
      Class.forName("com.mysql.jdbc.Driver").newInstance(); 
      Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/payroll_system", "root", ""); 
      PreparedStatement ps = con.prepareStatement("INSERT INTO payroll_system.monthly_timesheet(employeeID, Date, Hours, AnnualLeave, SickLeave) values (?,?,?,?,?)"); 
      ps.setString(1, employee_id); 
      ps.setString(2, date); 
      ps.setString(3, hours); 
      ps.setString(4, ALeave); 
      ps.setString(5, SLeave); 


      int count = ps.executeUpdate(); 

      if(count>0) { 
       ***//this is where I want the other table to deduct the annual/sick leave balance from its columns "sick leave remaining" and annual leave remaining"//*** 
      out.println("Details Successfully Submitted"); 
      RequestDispatcher rs = request.getRequestDispatcher("TimeSheet.html"); 
      rs.include(request, response); 
      } 

     }catch(Exception e) 
     { 
     e.printStackTrace(); 
     out.println("Failed to submit details"); 
     RequestDispatcher rs = request.getRequestDispatcher("TimeSheet.html"); 
     rs.include(request, response); 
     } 
     out.close(); 
} 

    @Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
       processRequest(request, response); 
      } 

    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
       processRequest(request, response); 
      } 

    } 
+1

В чем ваш вопрос в точности? Когда вы знаете, где вы должны обновить другую таблицу с вычисленным значением, почему вы этого не сделали? Я там какая-то проблема? Вы должны выполнить инструкцию 'UPDATE', чтобы обновить другую таблицу. Сделайте это, и если у вас возникли проблемы, сообщите об этом здесь. – STaefi

+0

@STaefi Привет! Я не знал, как вычесть входное значение пользователя из таблицы. Но мне удалось это сделать после ответа ниже, спасибо! – javaprogrammer

+0

Обычно вы не храните производные данные – Strawberry

ответ

0

Что вы смотрите здесь, по существу сделки, где вы вставить одну таблицу и обновить другую, так вот как вы это делаете, добавьте новый метод, скажем insertUpdateLeaves(), который принимает параметры, так что это было бы что-то вроде

public int insertUpdateLeaves(String employeeId,String date,String hours,String aLeave, String sLeave) 
{ 
    Class.forName("com.mysql.jdbc.Driver").newInstance(); 
      Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/payroll_system", "root", ""); 
    con.setAutoCommit(false); 
//When you set the autoCommit to false, it means no SQL statement is committed, unless you call it explicitly. 



// Make two Prepared Statements one for Insert and another for Update 
      PreparedStatement ps = con.prepareStatement("INSERT INTO payroll_system.monthly_timesheet(employeeID, Date, Hours, AnnualLeave, SickLeave) values (?,?,?,?,?)"); 
    String updateLeaveSQL=""; //Your Update query would be here 
      PreparedStatement ps1 = con.prepareStatement(updateLeaveSQL); 

//First run your insert statement 
ps.setString(1, employee_id); 
      ps.setString(2, date); 
      ps.setString(3, hours); 
      ps.setString(4, ALeave); 
      ps.setString(5, SLeave); 
      int count = ps.executeUpdate(); 

//Since you need the existing Annual Leaves in your Leave_Remaining table, use a select Query to get the existing ones 

int existingAnnualLeaves=<Value you get from Leave_Remaining Table>; 

//Now update with existing Leaves 
existingAnnualLeaves=existingAnnualLeaves-ALeave; 

//Run your update Query setting existingAnnualLeaves with this value 
//Once you are finished with both insert and update call autoCommit. 
      con.commit(); 






); 

} 
+0

Спасибо большое! – javaprogrammer

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