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>"); } }
举一反三
根据本实例,读者可以:
编写用户登录程序;
编写会员登录程序。