- Java Web程序开发范例宝典
- 王国辉 郭铁 李根福编著
- 385字
- 2020-06-27 11:01:05
4.12 立即获取插入记录的自动编号
通常数据库中的唯一表编号都会使用自动编号来指定,本节将介绍如何立即获取插入记录的自动编号。
实例109 通过JDBC获取插入记录的自动编号
本实例是一个提高效率、人性化的程序
实例位置:光盘\mingrisoft\04\109
实例说明
在开发网站程序时,有时需要按级别显示数据信息,使信息分类显示在页面中。运行程序,在“添加部门名称”文本框中输入要添加的部门信息,在“选择上级部门”下拉列表中选择上级部门,单击“提交”按钮。若添加成功,显示添加部门的编号,如图4.73所示。
图4.73 通过JDBC获取插入记录的自动编号
技术要点
本实例主要使用SQL语句中的@@IDENTITY全局变量来获取插入记录的编号,该变量必须与插入语句一起执行,否则得到的将是空值。
实现过程
(1)创建UserDao类,定义数据库连接和查询的方法。
(2)编写JavaScript脚本语句,对表单进行验证,代码如下:
<script language="JavaScript" type="text/JavaScript"> function check() { //v4.01 if (form1.textfield.value==""){ window.alert("部门名称不能为空!"); this.form1.textfield.focus(); return false; } } </script>
(3)执行数据插入操作并显示提示信息,代码如下:
<% String DeptName=""; String ID=""; DeptName=request.getParameter("textfield"); ID=request.getParameter("select"); if (DeptName!=null){ ResultSet RS1=dao.selectStatic("insert tb_dept(DeptName,shangji) values('"+DeptName+"',"+ID+") "+"Select @@IDENTITY as id"); RS1.first(); out.print("<script language=javascript>alert('添加成功,编号为"+RS1.getString("id")+"')</script>"); } %>
举一反三
根据本实例,读者可以:
人力资源管理系统部门设置;
新闻级别分类;
工资级别分类。
实例110 通过Hibernate获取插入记录的自动编号
本实例是一个实用的程序
实例位置:光盘\mingrisoft\04\110
实例说明
在开发网络应用程序时,经常会遇到对主明细表进行数据插入的情况,这时,如果主表中的ID采用的是系统自动编号,那么在插入从表数据时,就需要获取主表插入记录的自动编号。本实例将介绍如何通过Hibernate获取插入记录的自动编号。运行本实例,填写相应的管理员信息(如图4.74所示)后,单击“保存”按钮,即可将管理员信息添加到管理员信息表中,同时将该管理员的ID插入到权限信息表中。
图4.74 通过Hibernate获取插入记录的自动编号
技术要点
在介绍如何通过Hibernate获取插入记录的自动编号之前,先对Session保存对象的步骤进行介绍。
(1)根据配置文件中设置的主键ID生成算法(本实例中采用的是increment,由Hibernate自动以递增的方式生成标识符,步长为1),生成一个ID值。
(2)将实体类对象纳入Session的内部缓存。
(3)提交事务时,将新的对象通过INSERT语句持久化到数据库。
从上面的步骤中可以看出,当执行Session的save()方法后,原来的实体类对象已经被更新,这时就可以通过实体类对象的getXXX()方法获取生成的自动编号。
实现过程
(1)Hibernate包的获得与放置。Hibernate包可以到它的官方网站(http://www.hibernate.org)下载。如果不采用开发工具,可以直接将lib文件夹内的所有Jar包和与lib同目录的Jar包复制到Web-INF/lib文件夹内;否则,引入方法因开发工具而定。
(2)配置Hibernate配置文件hibernate.cfg.xml。该文件存储于src文件夹下。代码及解析见实例078的技术要点。
(3)创建实体类及映射文件。本实例中共涉及两个实体类和映射文件,分别是:与管理员信息表tb_manager对应的实体类为ManagerForm,映射文件为managerForm.hbm.xml;与权限信息表tb_purview对应的实体类为PurviewForm,映射文件为purviewForm. hbm.xml。
(4)创建业务处理逻辑类Manager,定义添加管理员信息的方法addManager(),在该方法中需要获取插入记录的自动编号值,代码如下:
public int addManager(ManagerForm managerForm){ Transaction tx = null; tx = session.beginTransaction(); int rtn=0; try { session.save(managerForm); int managerid=managerForm.getId(); //获取刚刚插入记录的ID值 PurviewForm pruviewForm=new PurviewForm(); pruviewForm.setId(managerid); pruviewForm.setBasicSet(0); pruviewForm.setPurviewSet(0); pruviewForm.setQuerySet(0); pruviewForm.setSellSet(0); pruviewForm.setStockSet(0); session.save(pruviewForm); tx.commit(); rtn = 1; } catch (Exception e) { tx.rollback(); System.out.println("保存管理员信息时的错误提示:" + e.getMessage()); rtn = 0; }finally{ session.close(); } return rtn; }
(5)创建index.jsp页面,用于提交管理员的登录信息。
(6)创建Servlet类Manager_Add。定义doPost()方法对添加的管理员信息进行处理。首先将客户端输入的管理员信息保存到实体类ManagerForm中,再通过调用Manager类中的addManager()方法将管理员信息保存到管理员信息表中,同时将管理员ID保存到权限信息表中。关键代码如下:
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); ManagerForm mf=new ManagerForm(); //实例化实体类 Manager manager=new Manager(); //实例化保存信息类 mf.setName(request.getParameter("name")); //将信息保存到实体类 mf.setPwd(request.getParameter("pwd")); int rtn=manager.addManager(mf); //添加信息到数据库 if(rtn==0){ out.println("<script >alert('管理员信息添加失败!'); window.location.href='index.jsp';</script>"); }else if(rtn==2){ out.println("<script >alert('该管理员信息已经存在,请重新添加!!'); window.location.href='index.jsp';</script>"); }else{ out.println("<script >alert('管理员信息添加成功!!'); window.location.href='index.jsp';</script>"); } }
举一反三
根据本实例,读者可以:
开发电子商务网站中保存订单信息模块;
开发企业进销存管理系统中的销售、入库等模块。