2012-05-03 130 views
0

我正在嘗試一個代碼,我想創建一個表並將數據插入表中。 我想創建表格並插入數據僅用於使用複選框由用戶選擇的那些字段。 這是我的JSP代碼:插入複選框選擇的數據

<%@ page language="java" import="java.util.*"%> 
<%@ page import="java.sql.*" %> 
<% 
    try 
    { 
     Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
     String url = "jdbc:sqlserver://"; 
     Connection con = DriverManager.getConnection(url,"sa","SQL1423#3"); 
     Statement st=null; 

     String select[] = (String[]) session.getAttribute("a"); 
     String tblname=(String)session.getAttribute("tblname"); 
     //out.println(tblname); 
     //String select[] = request.getParameterValues("id"); 
     if (select != null && select.length != 0) 
     { 
      for (int i = 0; i < select.length; i++) 
      { 
       int ch=Integer.parseInt(select[i]); 
       //int counter=1; 
       //int ID=1; 
       switch(ch)    
       { 
        case 1 : 
         String idOne=request.getParameter("idOne"); 
         //out.println(idOne); 
         String idOneIns="insert into "+tblname+" (ID) values(?)"; 
         PreparedStatement pstmt = con.prepareStatement(idOneIns); 
         pstmt.setString(1, idOne); 
         //st=con.createStatement(); 
         int valueTwo = pstmt.executeUpdate(); 
         out.println("Inserted"); 
         break; 
        case 2 : 
         String ser=request.getParameter("series"); 
         String serIns="insert into "+tblname+" (SERIES) values(?)"; 
         PreparedStatement pst = con.prepareStatement(serIns); 
         pst.setString(1, ser); 
         int value = pst.executeUpdate(); 
         out.println("Inserted"); 
         break; 
        case 3 : 
         String sym=request.getParameter("symbol"); 
         String symIns="insert into "+tblname+" (SYMBOL) values(?)"; 
         PreparedStatement pstm = con.prepareStatement(symIns); 
         pstm.setString(1, sym); 
         int valueOne = pstm.executeUpdate(); 
         out.println("Inserted"); 
         break; 
       }//switch 
      }//for 
     }//if 
     st.close(); 
     con.close(); 
    }//try 
    catch(Exception e) 
    { 
     out.println(e); 
    } 
%> 

這裏的數據插入table.But如果我選擇所有三個複選框,然後插入數據爲:

Id Series Symbol 

1 null null 

null a  null 

null null b 

但我想插入的數據作爲:

Id Series Symbol 

1 a  b 

我應該做什麼改變,以便我會得到這個輸出?

+0

OMG,你爲什麼做所有的JSP?這太古老了。我覺得當人們在他們的JSP代碼中使用scriptlet時,容器供應商開始拋出警告/錯誤。 – adarshr

+0

你能澄清一下你的問題嗎?包括不同的可能的輸入值和這些不同輸入的想要的結果? – erikxiv

+0

好的。我想給用戶創建表的選項。有9個複選框,每個複選框代表表格的一列。現在用戶應該能夠通過選擇這些複選框來創建表格。假設他選擇3個複選框作爲ID,SERIES,SYMBOL。然後有一種表格,他假設將這些數據輸入到這些字段的文本框中。點擊提交後,應執行上述表格,並且必須在數據庫中用用戶輸入的數據創建這3個字段的表格。 – user1358548

回答

0
  1. 更新數據庫最好放在Controller中。 JSP頁面是更好地用於顯示結果(見MVC模式)
  2. 使用動態SQL確定數據庫中的表是極其危險的,可以有針對性地進行攻擊
  3. 您當前的代碼將遍歷輸入要素,對於每個元素插入數據庫表中的新行。你想要做的是組裝樹的值(從你的表單輸入)並只插入一行。例如。

    INSERT INTO表(ID,系列,SYMBOL)VALUES(?,?,?)

+0

我不確定每次我會得到相同的列名。因爲這些是用戶使用複選框選擇的名稱。並且切換案例用於知道選擇了哪些複選框。還有6個複選框。但爲了試用目的,我只使用其中的三個。這就是我使用動態SQL的原因。 – user1358548

+0

@adarshr:我是一名實習生,應該在jsp中完成所有工作。 – user1358548