【问题标题】:SQL Update query - trying to update sql recordSQL 更新查询 - 尝试更新 sql 记录
【发布时间】:2020-04-18 13:30:53
【问题描述】:

我正在尝试更新 SQL 表记录。我已经编写了使用 java 将文件(带有任何扩展名)上传到 SQL 数据库表中的程序,并且在存储文件时我已经在 SQL 表中存储了文件路径。这些上传的文件存储在本地系统的“allfiles”文件夹中,并且在 SQL 表路径列中将文件路径显示为“allfiles\”。现在,我还编写了更新该记录“update.jsp”的程序,但更新查询并未更新该 ID 的 SQL 记录。请建议我哪里出错了。下面是代码。没有发生错误。

简而言之:我希望当用户更新任何记录时,用户单击“编辑”按钮,然后 jsp 页面将打开并获取值,如果用户也想修改文件,那么他/她将从本地系统中选择文件并单击在“更新”按钮上,记录应该用更改更新,新选择的文件应该存储到 SQL 表中。

filelist.jsp 从数据库表中获取所有记录。

filelist.jsp

<tr>
<th style="width: 20%">File ID</th>
<th style="width: 20%">Z ID</th>
<th style="width: 20%">First Name</th>
<th style="width: 20%">Last Name</th>
<th style="width: 20%">Mail ID</th>
<th style="width: 20%">Division</th>
<th style="width: 20%">Department</th>
<th style="width: 20%">Cost Center Code</th>
<th style="width: 20%">Document No.</th>
<th style="width: 20%">Document Name</th>
<th style="width: 20%">Document Type</th>
<th style="width: 20%">Document Category</th>
<th style="width: 20%">Document Classification</th>
<th style="width: 20%">Authorised By</th>
<th style="width: 20%">Validity - From Date</th>
<th style="width: 20%">Validity - To Date</th>
<th style="width: 20%">Document Level</th>
<th style="width: 20%">Document General(F31151)</th>
<th style="width: 20%">Serial No.</th>
<th style="width: 20%">Revision No.</th>
<th style="width: 20%">Issuer</th>
<th style="width: 20%">Status</th>
<th style="width: 20%">File Name</th>
<th style="width: 20%">File Path</th>
<th style="width: 20%">Added Date</th>
<th style="width: 20%">Download</th>
<th class="text-center">Action</th>
<th style="width: 20%">Delete File</th>
</tr>
<%
  Connection con = null;
  PreparedStatement ps = null;
  ResultSet rs = null;
  String id = request.getParameter("id");
  Class.forName("com.mysql.jdbc.Driver");
  con = DriverManager.getConnection("jdbc:mysql://localhost:3306/dmsqms","root","");
  String zid = request.getParameter("zid");
  String sql = "select * from dmsfiles where zid= '"+zid+"'";
  ps = con.prepareStatement(sql);
  rs = ps.executeQuery();
  while(rs.next()){
  //String id = rs.getString("id");
%>
<tr>
<td><%=rs.getString(1)%></td>              
<td><%=rs.getString(2)%></td>           
<td><%=rs.getString(3)%></td>   
<td><%=rs.getString(4)%></td> 
<td><%=rs.getString(5)%></td> 
<td><%=rs.getString(6)%></td> 
<td><%=rs.getString(7)%></td>
<td><%=rs.getString(8)%></td>              
<td><%=rs.getString(9)%></td>
<td><%=rs.getString(10)%></td>          
<td><%=rs.getString(11)%></td> 
<td><%=rs.getString(12)%></td>           
<td><%=rs.getString(13)%></td>
<td><%=rs.getString(14)%></td>
<td><%=rs.getString(15)%></td>
<td><%=rs.getString(16)%></td>
<td><%=rs.getString(17)%></td>
<td><%=rs.getString(18)%></td>
<td><%=rs.getString(19)%></td>
<td><%=rs.getString(20)%></td>
<td><%=rs.getString(21)%></td>
<td><%=rs.getString(22)%></td>
<td><%=rs.getString(23)%></td>
<td><%=rs.getString(24)%></td>
<td><%=rs.getString(25)%></td>        
<td><a href="DownloadServletClass?fileName=<%=rs.getString(23)%>" class="btn btn-primary">Download</a></td>
<td><a href="update.jsp?id=<%=rs.getString("id")%>" class="btn btn-warning">Update</a></td>
<td><a href="deleteFile.jsp?id=<%=id%>" class="btn btn-danger" onclick="return confirm('Are you sure you want to delete this file?')">Delete</a></td>
</tr>
<%
}
 %>

这是 update.jsp

<%@page import="java.io.File"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="java.sql.*"%>
<!DOCTYPE html>
<html>
<head>
<%
try{
String id = request.getParameter("id");
String z_id = request.getParameter("zid");
String first_Name = request.getParameter("firstname");
String last_Name = request.getParameter("lastname");
String mail_i_d = request.getParameter("mailid");
String d_iv = request.getParameter("division");
String de_pt = request.getParameter("department");
String cost_centercode = request.getParameter("costcentercode");
String doc_num = request.getParameter("documentnumber");     
String doc_Name = request.getParameter("documentname");
String doc_Type = request.getParameter("Document_Type");     String doc_Category = request.getParameter("Document_Category");   
String doc_classification = request.getParameter("Document_Classification");
String authorised_by = request.getParameter("authorisedby");
String from_date = request.getParameter("fromdate");
String to_date = request.getParameter("todate");
String document_level = request.getParameter("documentlevel");
String document_general = request.getParameter("documentgeneral");
String serial_number = request.getParameter("serialnumber");
String revision_number = request.getParameter("revisionnumber");
String iss_uer = request.getParameter("issuer");
String sta_tus = request.getParameter("status");
String file_Name = "";
String folder_Name = "allfiles";
String pa_th = folder_Name + File.separator + file_Name;
Timestamp add_ed_date = new Timestamp(System.currentTimeMillis());
            
Connection con;
PreparedStatement ps;
ResultSet rs;
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/dmsqms","root","");
            
ps = con.prepareStatement("update dmsfiles set zid='"+z_id+"', firstname='"+first_Name+"',lastname='"+last_Name+"',mailid='"+mail_i_d+"',division='"+d_iv+"',department='"+de_pt+"',costcentercode='"+cost_centercode+"',document_number='"+doc_num+"',document_name='"+doc_Name+"',document_type='"+doc_Type+"',document_category='"+doc_Category+"',document_classification='"+doc_classification+"',authorised_by='"+authorised_by+"',fromdate='"+from_date+"',todate='"+to_date+"',document_level='"+document_level+"',document_general='"+document_general+"',serial_number='"+serial_number+"',revision_number='"+revision_number+"',issuer='"+iss_uer+"',status='"+sta_tus+"', filename='"+file_Name+"',path='"+pa_th+"',added_date='"+add_ed_date+"' where id = '"+id+"'");
            ps.setString(1, z_id);
            ps.setString(2,first_Name);
            ps.setString(3,last_Name);
            ps.setString(4,mail_i_d);
            ps.setString(5,d_iv);
            ps.setString(6,de_pt);
            ps.setString(7,cost_centercode);
            ps.setString(8,doc_num);
            ps.setString(9,doc_Name);
            ps.setString(10,doc_Type);
            ps.setString(11,doc_Category);
            ps.setString(12,doc_classification);
            ps.setString(13,authorised_by);
            ps.setString(14,from_date);
            ps.setString(15,to_date);
            ps.setString(16,document_level);
            ps.setString(17,document_general);
            ps.setString(18,serial_number);
            ps.setString(19,revision_number);
            ps.setString(20,iss_uer);
            ps.setString(21,sta_tus);
            ps.setString(22,file_Name);
            ps.setString(23,pa_th);
            ps.setTimestamp(24, add_ed_date);
            //ps.setString(25, id);
  
            ps.executeUpdate();
            con.close();   
%>
<script>
 alert("Record Updated!!");
</script> 
<%
}
catch(SQLException sql)
{
}
%>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
<title>Update record Page</title>
<script type="text/javascript">
function showHide() {
  var checkbox = document.getElementById("chk");
  var hiddeninputs = document.getElementsByClassName("hidden");

   for (var i = 0; i != hiddeninputs.length; i++) {
      if (checkbox.checked) {
         hiddeninputs[i].style.display = "block";
      } else {
         hiddeninputs[i].style.display = "none";
      }
     }
   }
</script>
    </head>
    <body>
        
    <div id="Registercontainer">
    <div class="RegForm">    
    <div id="back_glob">    
    <div id="back_form">
        <form action="success.jsp" method="post" enctype="multipart/form-data">
            <%
                Connection con;
                PreparedStatement ps;
                ResultSet rs;
                
                Class.forName("com.mysql.jdbc.Driver");
                con = DriverManager.getConnection("jdbc:mysql://localhost:3306/dmsqms","root","");
                
                String id = request.getParameter("id");
                ps = con.prepareStatement("select * from dmsfiles where id = ?");
                ps.setString(1, id);
                rs = ps.executeQuery();
                
                while(rs.next()){


                
            %>
        <input type="hidden" name="id" value="<%=rs.getString("id") %>"/>
        
            <center><h2>Update Record</h2></center>
            
            <table width="400px" align="center" border="2">
                <tr>
                    <td align="center" colspan="2">Form Details</td>
                </tr>
               <%-- <tr>
                    <td></td>
                    <td><input type="text" required="" name="zid" value="<%=rs.getString("id")%>"/></td>
                </tr> --%>
                <tr>
                    <td>Z id</td>
                    <td>
                        <input type="text" required="" name="zid" value="<%=rs.getString("zid")%>"/>
                    </td>
                </tr>
                <tr>
                    <td>First Name</td>
                    <td>
                        <input type="text" required="" name="firstname" value="<%=rs.getString("firstname")%>"/>
                        
                    </td>
                </tr>
                
                <tr>
                    <td>Last Name</td>
                    <td>
                        <input type="text" required="" name="lastname" value="<%=rs.getString("lastname")%>"/>
                        
                    </td>
                </tr>
                <tr>
                    <td>Mail id</td>
                    <td>
                        <input type="email" required="" name="mailid" value="<%=rs.getString("mailid")%>"/>
                    </td>
                </tr>
                <tr>
                    <td>Division</td>
                    <td>
                    <select name="division" id="wgtmsr">
                    <option value="<%=rs.getString("division")%>"><%=rs.getString("division")%></option>
                    <option value="B">B</option>
                    <option value="Z">Z</option>
                    <option value="I">I</option>
                    <option value="CF">CF</option>
                    <option value="P">P</option>
                    <option value="P">TT</option>
                    <option value="P">TC</option>
                    <option value="P">MA</option>
                    <option value="P">Z HYD</option>
                    <option value="P">CC</option>
                    <option value="P">CY</option>
                    </select>
                    </td>
                </tr>
                
               <tr>
                    <td>Department</td>
                    <td>
                    <select name="department" id="wgtmsr">
                    <option value="<%=rs.getString("department")%>"><%=rs.getString("department")%></option>
                    <option value="IT">IT</option>
                    <option value="Finance">Finance</option>
                    <option value="Logistics">Logistics</option>
                    <option value="Design">Design</option>
                    <option value="Purchase">Purchase</option>
                    <option value="Sales">Sales</option>
                    <option value="Material Management">Material Management</option>
                    
                    </select>
                    </td>
                </tr>
                
                <tr>
                    <td>Cost Center Code</td>
                    <td>
                    <select name="costcentercode" id="wgtmsr">
                    <option value="<%=rs.getString("costcentercode")%>"><%=rs.getString("costcentercode")%></option>
                    <option value="100115">100115</option>
                    <option value="100138">100138</option>
                    <option value="100630">100630</option>
                    <option value="100812">100812</option>
                    <option value="100823">100823</option>
                    <option value="500904">500904</option>
                    <option value="500907">500907</option>
                    <option value="700415">700415</option>
                    
                    
                    </select>
                    </td>
                </tr>
                <tr>
                    <td>Document Number</td>
                    <td>
                        <input type="text" required="" name="documentnumber" value="<%=rs.getString("document_number")%>"/>
                    </td>
                </tr>
                
                <tr>
                    <td>Document Name</td>
                    <td>
                        <input type="text" required="" name="documentname" value="<%=rs.getString("document_name")%>"/>
                    </td>
                </tr>
                
                <tr>
                    <td>Document Type</td>
                    <td>
                    <select name="Document_Type" id="wgtmsr">
                    <option value="<%=rs.getString("document_type")%>"><%=rs.getString("document_type")%></option>
                    <option value="Agreement">Agreement</option>
                    <option value="Contract">Contract</option>
                    <option value="PO">PO</option>
                    <option value="Invoice">Invoice</option>
                    <option value="COA">COA</option>
                    <option value="Lease Deed">Lease Deed</option>
                    <option value="AMC">AMC</option>
                    <option value="Direct Material">Direct Material</option>
                    <option value="Indirect Material/Services">Indirect Material/Services</option>
                    
                    </select>
                    </td>
                </tr>
                <br><br>
                <tr>
                    <td>Document Category</td>
                    <td>
                    <select name="Document_Category" id="wgtmsr">
                    <option value="<%=rs.getString("document_category")%>"><%=rs.getString("document_category")%></option>    
                    <option value="Customer">Customer</option>
                    <option value="Vendor">Vendor</option>
                    <option value="Internal">Internal</option>
                    
                    </select>
                    </td>
                
                </tr>
                <tr>
                    <td>Document Classification</td>
                    <td>
                        <select name="Document_Classification" id="wgtmsr">
                        <option value="<%=rs.getString("document_classification")%>"><%=rs.getString("document_classification")%></option>
                        <option value="Public">Public</option>
                        <option value="Internal">Internal</option>
                        <option value="ZF Confidential">ZF Confidential</option>
                        <option value="ZF Strictly Confidential">ZF Strictly Confidential</option>
                    </select>
                    </td>
                
                </tr>
                <br><br>
                
                <tr>
                    <td>Authorised By</td>
                    <td>
                        <select name="authorisedby" id="wgtmsr">
                        <option value="<%=rs.getString("authorised_by")%>"><%=rs.getString("authorised_by")%></option>
                        <option value="Soma Ghosh">Soma Ghosh</option>
                        <option value="KV Suresh">KV Suresh</option>
                        <option value="Raghavendra Deolankar">Raghavendra Deolankar</option>
                        <option value="Shriram Aparnnaa">Shriram Aparnnaa</option>
                    </select>
                    </td>
                
                </tr>
                
                <tr>
                    <td>Validity - From date</td>
                    <td>
                        <input type="date" required="" name="fromdate" value="<%=rs.getString("fromdate")%>"/>
                    </td>
                </tr>
                <tr>
                    <td>Validity - To Date</td>
                    <td>
                        <input type="date" required="" name="todate" value="<%=rs.getString("todate")%>"/>
                    </td>
                </tr>
                
                
                
                <!–– Code for QMS start   ––>
                
                <tr>
                    <td><label for="chk">QMS</label></td>
                    <td>
                        <input type="checkbox" name="chk" id="chk" value="check" onclick="showHide()"/>
                        
                    </td>
                </tr>
                
                <tr>
                    <td><label class="hidden">Document Level(F31151)</label></td>
                    <td>
                        
                        <select name="documentlevel" class="hidden" id="wgtmsr">
                        <option value="<%=rs.getString("document_level")%>"><%=rs.getString("document_level")%></option>
                        <option value="0: QMM">0: QMM</option>
                        <option value="1: Business-Process">1: Business-Process</option>
                        <option value="2: Process & Descriptions">2: Process & Descriptions</option>
                        <option value="3: Work Instructions">Work Instructions</option>
                        <option value="4: Checklist & Form">Checklist & Form</option>
                        </select>
                    </td>
                </tr>
                
                <tr>
                    <td><label class="hidden">Document 00 General</label></td>
                    <td>
                        
                        <select name="documentgeneral" class="hidden" id="wgtmsr">
                        <option value="<%=rs.getString("document_general")%>"><%=rs.getString("document_general")%></option>
                        <option value="00 General">00 General</option>
                        <option value="01 SDP Strategy Development Process">01 SDP Strategy Development Process</option>
                        <option value="02 Sales & Application Process">02 Sales & Application Process</option>
                        <option value="03 PDP Product Development Process">03 PDP Product Development Process</option>
                        <option value="04 PP Purchasing process">04 PP Purchasing process</option>
                        <option value="05 MP Maintenance Process">05 MP Maintenance Process</option>
                        <option value="06 Manufacturing & Delivery Process">06 Manufacturing & Delivery Process</option>
                        </select>
                    </td>
                </tr>
                
                <tr>
                    <td><label class="hidden">Serial Number</label></td>
                    <td>
                        <input type="text" name="serialnumber" class="hidden" value="<%=rs.getString("serial_number")%>"/>
                    </td>
                </tr>
                
                <tr>
                    <td><label class="hidden">Revision No.</label></td>
                    <td >
                        
                        <select name="revisionnumber" class="hidden" id="wgtmsr">
                        <option value="<%=rs.getString("revision_number")%>"><%=rs.getString("revision_number")%></option>
                        <option value="00">00</option>
                        <option value="01">01</option>
                        <option value="02">02</option>
                        <option value="03">03</option>
                        <option value="04">04</option>
                        <option value="05">05</option>
                        <option value="06">06</option>
                        <option value="07">07</option>
                        <option value="08">08</option>
                        <option value="09">09</option>
                        <option value="10">10</option>
                        <option value="11">11</option>
                        <option value="12">12</option>
                        <option value="13">13</option>
                        <option value="14">14</option>
                        <option value="15">15</option>
                        </select>
                    </td>
                </tr>
                
                
                
                <tr>
                    <td><label class="hidden">Issuer</label></td>
                    <td>
                        <input type="text" name="issuer" class="hidden" value="<%=rs.getString("issuer")%>"/>
                    </td>
                </tr>
                
                <tr>
                    <td><label class="hidden">Status</label></td>
                    <td>
                        
                        <select name="status" class="hidden" id="wgtmsr">
                        <option value="<%=rs.getString("status")%>"><%=rs.getString("status")%></option>
                        <option value="Public">Reserved</option>
                        <option value="Team">Implemented</option>
                        
                        </select>
                    </td>
                </tr>
  
                
                <!–– Code for QMS end   ––>
                <tr>
                    <td>Select File</td>
                    <td>
                        <input type="file" name="fileName" multiple="multiple" value="<%=rs.getString("fileName")%>"/>
                        <span> <%=rs.getString("filename")%> </span>
                    </td>
                </tr>
                
              <%  
                  }
              %>
                <tr>
                    <td></td>
                    <td>
                        <input type="submit" value="submit" name="submit" id="submit" class="btn btn-success"/>
                    </td>
                </tr>
                
                
            </table>
                <p><a href="home.jsp" class="btn btn-info">Back</a></p>
        </form>
    </div>
    </div>
    </div>
    </body>
</html>

【问题讨论】:

标签: java mysql jsp servlets sql-update


【解决方案1】:

这可能是由于,

  ps.setString(25, id);

您在准备好的语句中定义了总共 24 个可以传递的属性。但是,您传递了 25 个属性。此外,您应该考虑只更新所需的必要字段,而不是更新表中定义的所有参数。

你的陈述看起来像,

  ps = con.prepareStatement("update dmsfiles set zid=?, firstname=?,lastname=?,mailid=?,division=?,department=?,costcentercode=?,document_number=?,document_name=?,document_type=?,document_category=?,document_classification=?,authorised_by=?,fromdate=?,todate=?,document_level=?,document_general=?,serial_number=?,revision_number=?,issuer=?,status=?,filename=?,path=?,added_date=? where id = '"+id+"'");

只需替换,

where id = '"+id+"'")

与,

where id = ?")

【讨论】:

  • 我按照你说的做了更改,但没有更新。当我点击提交按钮时,打开了相同的页面。
【解决方案2】:

您的代码目前有很多错误,我无法在评论中写下全部内容,这就是我将其发布为答案的原因。以下是我在您的代码中看到的一些错误:

1.) 您在查询中直接传递所有值,即 :"update dmsfiles set zid='"+z_id+"', firstname='"+firstname... 并且您对所有值都使用了ps.setString(..)?为什么?

2.) 如果您的更新代码在同一页面上,您的表单在哪里?如果您输入&lt;form action="success.jsp"&gt;,那么您的表单将重定向到该页面而不提交。而是将您的更新代码放入success.jsp 或使用response.sendRedirect().. 在更新后重定向到success.jsp

3.) 您在&lt;form&gt; 中注释掉了&lt;input type="text" required="" name="zid" value="&lt;%=rs.getString("id")%&gt;"/&gt;,请取消注释并更改name="id" 以在您的更新代码中获取所需的id

4.) 请在 catch 块内打印异常,即:catch(SQLException sql){sql.printStackTrace();} 以查看您的查询是否有任何错误。

【讨论】:

    【解决方案3】:
    try {    
    con = DriverManager.getConnection("jdbc:mysql://localhost:3306/dmsqms","root","");
    
        ps = con.prepareStatement("update dmsfiles set zid=?, firstname=?,lastname=?,mailid=?,division=?,department=?,costcentercode=?,document_number=?,document_name=?,document_type=?,document_category=?,document_classification=?,authorised_by=?,fromdate=?,todate=?,document_level=?,document_general=?,serial_number=?,revision_number=?,issuer=?,status=?,filename=?,path=?,added_date=? where id = ?");
    
                    ps.setString(1, z_id);
                    ps.setString(2,first_Name);
                    ps.setString(3,last_Name);
                    ps.setString(4,mail_i_d);
                    ps.setString(5,d_iv);
                    ps.setString(6,de_pt);
                    ps.setString(7,cost_centercode);
                    ps.setString(8,doc_num);
                    ps.setString(9,doc_Name);
                    ps.setString(10,doc_Type);
                    ps.setString(11,doc_Category);
                    ps.setString(12,doc_classification);
                    ps.setString(13,authorised_by);
                    ps.setString(14,from_date);
                    ps.setString(15,to_date);
                    ps.setString(16,document_level);
                    ps.setString(17,document_general);
                    ps.setString(18,serial_number);
                    ps.setString(19,revision_number);
                    ps.setString(20,iss_uer);
                    ps.setString(21,sta_tus);
                    ps.setString(22,file_Name);
                    ps.setString(23,pa_th);
                    ps.setTimestamp(24, add_ed_date);
                    ps.setString(25, id); //<- uncommented this
    
                    ps.executeUpdate();
    
                    ps.close(); //<- added this
                    con.close();   
    } catch (Exception e) {
                out.println("Error: " + e.toString()); // If error occured, you can see the error message in detail
            } 
    

    【讨论】:

    • 你能帮我在上面的 UploadServletClass.java 文件中如何编写或使用更新查询。
    • 如果我对此行发表评论ps.setString(25, id);,那么我收到此错误Error: java.sql.SQLException: No value specified for parameter 25
    • 我在网页上收到此错误。 Error: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'zid' cannot be null,当我取消注释 ps.setString(25, id);
    • @priyadhanba 你所有的数据库字段都是'not-null',所以你不能在表中设置空值。请在 db 连接前检查所有字段的可空性。
    • @priyadhanba 你写这个 -
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    相关资源
    最近更新 更多