4.7 数据插入

数据插入是编写网络应用程序必不可少的操作,任何一个程序都离不开增、删、改、查这几步操作。在JSP中数据插入有两种:一种是利用ResultSet结果集中的insertRow()方法;另一种是通过SQL语句。本节主要通过SQL语句来实现。

实例096 单条数据录入

本实例是一个数据库操作的程序

实例位置:光盘\mingrisoft\04\096

实例说明

单条数据录入在网站或网络程序中被广泛应用。它可以向数据表中添加单一的信息,并在添加信息前对信息进行检验。运行本实例,当客户填写完以“*”标注的信息后单击“提交”按钮,程序首先会对输入的信息进行验证,当通过验证后将信息插入数据库中。运行结果如图4.54所示。

图4.54 单条数据录入

技术要点

本实例首先将数据插入这步操作封装到一个方法中,并将所有字段以参数的形式定义在该方法中。这样当调用该方法时,只要将所有字段信息添加到方法的参数中即可。在提交表单之前,使用JavaScript对表单中的信息进行数据验证,验证信息是否填写完整。只有当信息填写完整后才可以调用添加数据的方法。

实现过程

(1)创建数据库操作类UserDao。定义加载数据库驱动,连接、更新和关闭数据库的方法。

其中更新数据库的方法是executeUpdate(),代码如下:

          public boolean executeUpdate(String name,String sex,String idcred,String age,
                    String nationality,String unit,String phone,String memo) {
                if (con == null) {
                    Connection();
                }
                try {
                String sql = "insert tb_Single (SName,SSex,SIDCred,SAge,Snationality,SUnit,SPhone,SMemo) "+
                    "values('"+name+"',"+sex+","+idcred+","+age+",'"+nationality+"','"+unit+"','"
                            +phone+"','"+memo+"')";
                    stmt = con.createStatement();
                    int iCount = stmt.executeUpdate(sql);
                    System.out.println("操作成功,所影响的记录数为" + String.valueOf(iCount));
                } catch (SQLException e) {
                    System.out.println(e.getMessage());
                    return false;
                }
                closeConnection();
                return true;
            }

(2)编写验证表单提交数据信息的JavaScript函数,代码如下:

        <script type="text/javascript" language="javascript">
            function checkEmpty(form){
                if(document.form.name.value==""){
                    alert("请将代有*号的信息填写完整!");
                    return false;
                }else if (document.form.idcred.value==""){
                    alert("请将代有*号的信息填写完整!");
                    return false;
                }else if (document.form.nationality.value==""){
                    alert("请将代有*号的信息填写完整!");
                    return false;
                }else if (document.form.phone.value==""){
                    alert("请将代有*号的信息填写完整!");
                    return false;
                }else{
                    return true;
                }
            }
        </script>

(3)创建表单,通过OnSubmit事件执行数据验证和插入记录的操作。其中通过JavaBean标签调用UserDao类,执行executeUpdate()方法,向数据库中添加数据。关键代码如下:

        <%@ page language="java" import="java.sql.*,java.lang.*,java.util.*"
            contentType="text/html; charset=gbk" pageEncoding="GBK"%>
        <jsp:useBean id="dao" scope="page" class="com.pkh.dao.UserDao" />
        <form name="form" method="post" action="index.jsp" onSubmit="if (checkEmpty(form)) {
            <%
                dao.executeUpdate(request.getParameter("name"), request.getParameter("sex"), request.getParameter("idcred"),
                            request.getParameter("age"), request.getParameter("nationality"),
                            request.getParameter("unit"), request.getParameter("phone"),
                            request.getParameter("memo"));
            %>
        }">
            <input type="submit" name="Submit" value="提交">
            <input type="reset" name="Submit2" value="重置">
        </form>

举一反三

根据本实例,读者可以:

开发在线论坛中的用户注册模块;

开发电子商务网站后台的商品信息添加模块;

开发在线订单模块。

实例097 批量数据插入

本实例是一个数据库操作的程序

实例位置:光盘\mingrisoft\04\097

实例说明

批量数据插入的应用是比较广泛的,而且在现实生活中通过批量数据插入可以达到省时省力、提高效率的目的。在SQL Server中,可以在INSERT语句中指定查询语句来实现数据的批量插入。本实例中,在JSP页文本框中,输入要添加数据的条款,单击“提交”按钮,进入下一个JSP页面,然后在这个JSP页中输入要添加的信息,单击“提交”按钮,即可查看要添加的信息。本实例的实现过程如图4.55所示。

图4.55 本实例的实现过程

技术要点

本实例主要应用For循环语句,实现多次插入数据的功能,关键代码如下:

        for(int j=0;j<i;j++){                            //执行for循环,根据插入数据的条数
            String name="name"+j;
            String age="age"+j;
            String profession="profession"+j;
            String userName=request.getParameter(name);  //获取提交的数据
            Integer userAge=Integer.valueOf(request.getParameter(age));
            String userProfession=request.getParameter(profession);
            String sql="insert into tb_bacthDate values ('"+userName+"','"+userAge+"','"+userProfession+"')";
            dao.executeUpdate(sql);                     //执行添加操作
        }

其中,name、age以及profession是要插入数据的对象。

实现过程

(1)创建UserDao类,定义方法实现数据库的连接、查询、更新和关闭的操作。其中更新数据使用的是executeUpdate()方法,代码如下:

        public boolean executeUpdate(String sql) {
            if (con == null) {
                Connection();
            }
            try {
                stmt = con.createStatement();
                    int iCount = stmt.executeUpdate(sql);
                    System.out.println("操作成功,所影响的记录数为" + String.valueOf(iCount));
                } catch (SQLException e) {
                    System.out.println(e.getMessage());
                    return false;
                }
                closeConnection();
                return true;
            }

(2)创建index.jsp页面,添加form表单,设置用于添加记录条数的文本框和“提交”按钮。关键代码如下:

        <form name="form" method="post" action="insert.jsp">
            <input name="i" type="text">
            <input type="submit" name="Submit2" value="提交">
            <input type="reset" name="Submit" value="重置">
        </form>

(3)创建insert.jsp页面,根据index.jsp页面提交的值,通过For循环语句创建指定个数的文本框,用于实现数据的批量插入。关键代码如下:

        <%
            int i=Integer.parseInt(request.getParameter("i")); //从上页中取得数量
        %>
        <form name="form" method="post" action="Insert_Data?i=<%=i%>" onSubmit="return checkEmpty(form)">
        <%  for(int j=0;j<i;j++){   %>
            <tr align="center">
                <td height="31" bgcolor="#BDA9C5"><input name="name<%=j%>" type="text" size="15"></td>
                <td bgcolor="#BDA9C5"><input name="age<%=j%>" type="text" size="10"></td>
                <td bgcolor="#BDA9C5"><input name="profession<%=j%>" type="text" size="15"></td>
            </tr>
        <%  }   %>
                <input type="submit" name="Submit" value="提交">
                <input type="reset" name="Submit2" value="重置">
        </form>

(4)创建Servlet类Insert_Data,通过doPost()方法将表单中提交的数据批量添加到数据库中,并返回到index_ok.jsp页面。关键代码如下:

        public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
            PrintWriter out = response.getWriter();
            UserDao dao=new UserDao();                               //实例化数据库操作类
            if(request.getParameter("i")!=null){                   //判断I的值是否为空
                int i=Integer.parseInt(request.getParameter("i"));
                for(int j=0;j<i;j++){                               //根据I的值执行for循环语句
                    String name="name"+j;
                    String age="age"+j;
                    String profession="profession"+j;
                    String userName=request.getParameter(name);     //获取表单中提交的数据
                    Integer userAge=Integer.valueOf(request.getParameter(age));
                    String userProfession=request.getParameter(profession);
                    String sql="insert into tb_bacthDate values ('"+userName+"','"+userAge+"','"+userProfession+"')";
                    dao.executeUpdate(sql);                        //执行插入语句
                }
                out.println("<script >alert('数据添加成功!'); window.location.href='index_ok.jsp';</script>");
            }
        }

(5)创建index_ok.jsp页面,输出批量添加的数据。关键代码如下:

        <%
            if (con.Connection()) {
                out.println("数据库连接成功!");
            } else {
                out.println("数据库连接失败!");
            }
        %>
        <%
            String SQL = "Select * From tb_bacthDate";
            ResultSet Rs;
            Rs = con.selectStatic(SQL);
        %>
        <%
            for (int i = 0; i < 3; i++) {
                Rs.next();
        %>
            <tr >
                <td height="22" align="center"><div align="center"><%=Rs.getString("name")%></div></td>
            </tr>
        <%  }   %>

举一反三

根据本实例,读者可以:

实现有条件地向数据表中插入数据信息;

实现批量填充数据表中的空记录信息。

实例098 插入用户登录日志信息

本实例是一个提高效率、人性化的程序

实例位置:光盘\mingrisoft\04\098

实例说明

在网站程序中,都会提供一个用户登录页面。该页面用于验证用户是否有权限登录此程序,在用户登录的同时也会将用户的登录信息记录到数据库中。程序运行结果如图4.56所示。

图4.56 插入用户登录日志信息

技术要点

本实例的所有操作都通过一个Servlet类Insert_Data完成。当用户登录成功后,将用户的登录信息通过Insert_Data类添加到指定的数据表中,进而实现业务代码与html的分离。

实现过程

(1)创建index.jsp登录页面,添加提交用户登录信息的表单,并将表单中的数据提交到Insert_Data类中。

(2)编写UserDao类,定义连接数据库、更新数据库和关闭数据库的方法。

(3)编写Servlet类Insert_Data,定义doPost()方法,将用户的登录信息添加到指定的数据表中。关键代码如下:

        public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
            PrintWriter out = response.getWriter();
            UserDao dao=new UserDao();                                             //实例化数据库操作类
            if ((String)request.getParameter("tname")!="" && (String)request.getParameter("tpassword")!=""){
                String userName=request.getParameter("tname");                     //获取登录用户名
                String passWord=request.getParameter("tpassword");                 //获取登录密码
                SimpleDateFormat date_time = new SimpleDateFormat("yyyy-MM-dd HH;mm;ss");
                String datetime=date_time.format(new Date());                      //定义时间字符串
                String info="信息系统录入";
                String sql="insert into tb_Login (LName,LPassword,LDate,Linfo)
    values('"+userName+"','"+passWord+"','"+datetime+"','"+info+"')";             //编写添加语句
                dao.executeUpdate(sql);                                           //执行添加语句
                out.println("<script >alert('用户登录成功!'); window.location.href='index.jsp';</script>");
            }
        }

举一反三

根据本实例,读者可以:

编写用户登录程序;

编写会员登录程序。