2016-05-27 24 views
1

複数のチェックボックスの値をmysqlデータベースの別々の行に挿入する際に助けが必要です。複数のチェックボックスの値をmysqlの別々の行に挿入する

ワークフロー:

1.ユーザーは、製品のチェックボックスを選択し、特定のチェックボックスに次のテキストボックスに製品についての説明に入ります。

2.チェックボックスをオンにすると、ユーザーは保存ボタンを押します。

3.保存をクリックすると、製品の詳細をデータベースに挿入する必要があります。 注:ユーザーは、複数のチェックボックス値を選択できます。

問題:

私は値を挿入する一般的な方法を使用していたが、唯一の1つのチェックボックスの値がdatabase.Iに挿入なっているにそのテキストボックスの値と一緒に複数のチェックボックスの値を挿入する必要があります保存ボタンをクリックすると、データベースが別の行として表示されます。

これは私のコードあなたが受信したすべての入力の配列を取得するには、サーブレットの使用request.getParameterValues("prod")

products.jsp

<%@page import="java.util.List"%> 
    <%@page import="web.Products"%> 
    <%@page import="java.util.ArrayList"%> 
    <%@page contentType="text/html" pageEncoding="UTF-8"%> 
    <!DOCTYPE html> 
    <html> 
    <form method="post" action="Save_Products"> 
<b>   
      Brand Name:<font color="green"> 
      <% String brand_name=(String)session.getAttribute("brand_name"); 
     out.print(brand_name);%> 
     <c:set var="brand_name" value="brand_name" scope="session" /> 
     </font></b>   
      <table>    
       <tr>     
        <th> Products</th> 
        <th> Description </th> 
       </tr> 
       <tr> 
       <td> <b><% 
     List<Products> pdts = (List<Products>) request.getAttribute("list"); 
     if(pdts!=null){ 
     for(Products prod: pdts){ 
      out.println("<input type=\"checkbox\" name=\"prod\" value=\"" + prod.getProductname() + "\">" + prod.getProductname()+"<br>"); 
      } %> </b></td> 

      <td><%for(Products prod: pdts){ 
      out.println("<input type=\"text\" name=\"desc\" style=\"width:50px; height:22px\"/><br/>"); 
     } 

     } 
      %> </td> 

     </tr> 
     <br/> 
     <br/> 
     <tr><td align="center"> <input type="submit" value="Save" name="save"/> </td></tr> 
      </table> 
    </form> 
    </body> 
    </html> 

サーブレットコード

import java.io.IOException; 
import java.io.PrintWriter; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import java.sql.*; 
import javax.servlet.RequestDispatcher; 
import javax.servlet.http.HttpSession; 


public class Save_Products extends HttpServlet { 
static final String dbURL = "jdbc:mysql://localhost:3306/pdt"; 
    static final String dbUser = "root"; 
    static final String dbPass = "root"; 
    @Override 
    public void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     response.setContentType("text/html;charset=UTF-8");  
     PrintWriter out = response.getWriter(); 
      ResultSet rs=null; 
      Connection connection = null; 
      try{ 
     HttpSession session = request.getSession(); 
    String brand_name =(String) session.getAttribute("brand_name"); 
    String prod=request.getParameter("prod"); 
    String desc=request.getParameter("desc"); 


    Class.forName("com.mysql.jdbc.Driver"); 
connection = DriverManager.getConnection (dbURL,dbUser,dbPass); 

String sql="insert into pdt_list(brand_name,product_name,desc)values(?,?,?)"; 
PreparedStatement prep = connection.prepareStatement(sql); 

prep.setString(1, brand_name); 
prep.setString(2, prod); 
prep.setString(3,desc); 

int i=prep.executeUpdate(); 

if(i>0) 
{  
    out.print("Product Details Saved Successfully..."); 
RequestDispatcher rd=request.getRequestDispatcher("Save_Success.jsp");  
      rd.forward(request,response);  
} 
else{ 
    RequestDispatcher rd=request.getRequestDispatcher("Save_Failure.jsp");  
      rd.forward(request,response); 
} 

prep.close(); 
     } 
    catch(Exception E){ 
//Any Exceptions will be caught here 
System.out.println("The error is"+E.getMessage()); 

    } 

     finally { 
      try { 
       connection.close(); 
      } 
     catch (Exception ex) { 
       System.out.println("The error is"+ex.getMessage()); 
      } 
       } 

} 

} 
+0

リクエストがパラメータ配列を送信したようですが、そのような場合は、 'request.getParameter(...)'の代わりに 'request.getParameterValues(...);'を使用して、これをループしてくださいデータベースに複数の行を挿入することができます。 – Titus

答えて

1

です。 request.getParameter("prod")はあなたに返されます。 descの値も同じです。

その後値をループして、DB

String [] prod_list = request.getParameterValues("prod"); 
String [] desc_list = request.getParameterValues("desc"); 
// set up your query 

PreparedStatement prep = connection.prepareStatement(sql); 

// just a precaution here getting min so we do not get outofbounds exception on one of the arrays 
// both arrays should be of same size - if not, something is wrong on your jsp logic 
int num_values = Math.min(prod_list.size(), desc_list.size()); 

int count_updated = 0; 
for(int i = 0; i < num_values; i++){ 
    prep.setString(1, brand_name); 
    prep.setString(2, prod_list[i]); 
    prep.setString(3,desc_list[i]); 
    count_updated += prep.executeUpdate(); 
} 

// Rest of your logic 

これはPreparedStatementを使用しての簡単な方法であるにそれらのすべてを挿入します。 PreparedStatementでバッチインサートを行う方法を確認してください。 Thisを起動する必要があります。

+0

ありがとう!私はコンセプトを得ました。私は値をループで案内してくれますか? – sound

+0

私はちょうどあなたが始めるためにいくつかのコードで私の答えを更新しました –

+0

ありがとう!今はうまくいきます。 – sound

関連する問題