插入由复选框选择的数据

时间:2012-05-03 11:06:43

标签: sql jsp

我正在尝试一个代码,我想创建一个表并将数据插入表中。 我想为只有那些用户使用复选框选择的字段创建表格和插入数据。 这是我的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);
    }
%>

此处数据已插入表格中。但如果我选中所有三个复选框,则数据将插入:

Id   Series Symbol

1    null   null

null a      null

null null   b

但我希望将数据插入:

Id Series Symbol

1  a      b

我应该做些什么改变才能得到这个输出?

1 个答案:

答案 0 :(得分:0)

  1. 更新数据库最好放入Controller。 JSP页面更适合用于显示结果(请参阅MVC pattern)
  2. 使用动态SQL来确定数据库表本身就很危险,可能会成为攻击目标
  3. 您当前的代码循环遍历输入元素,并且对于每个元素,在数据库表中插入一个新行。您要做的是组装树值(从表单输入)并仅插入一行。 E.g。

    INSERT INTO表(ID,SERIES,SYMBOL)VALUES(?,?,?)