2016-06-12 6 views
0

以下、ユーザーがフィールドに値を入力するhtmlページがあります。これらのフィールドはサーブレットに送られ、これらの値がデータベースに挿入されます。このテーブルの名前は "monthly_timesheet"です。ご覧のとおり、htmlの2つの入力フィールドには、「年次休暇」と「病気休暇」を入力する必要があります。私は別のテーブル「leave_remaining」(以下に示されていない)を持っています。そこには、「残っている病気」と「残っている年次休暇」というフィールドがあります。私が望むのは、以下のサーブレットが実行されると、例えば、ユーザーが「年次休暇」というフィールドに「5」と入力したとします。私は5つの年次葉を差し引いてそのテーブルを更新するために、残りのテーブル "leave_remaining"を望みます。ヘルプありがとう、ありがとう!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

はそう、基本的に使用すると、1つのテーブルを挿入し、別のものを更新するトランザクションであり、これは、あなたがそれを行う方法です、新しいメソッドを追加し、パラメータを取る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

関連する問題