日期:2014-05-16  浏览次数:20508 次

Java对数据库进行事务处理(批量删除操作)

本文是记录Java对数据库进行事务处理(删除操作),在开始之前先来看下面这样的一个页面图:


        上面这张图片显示的是从数据库中查询出的用户信息,信息中进行了分页处理,然后每行的前面提供了一个复选按钮,可以选中多个进行操作,这里主要是进行删除操作。在执行删除操作之前先先要选中对应的行信息,点击删除进行删除。当进行多条信息删除的时候,需要使用java的事务处理机制对数据库进行删除,也就是说删除的时候如果选中的要删除的说有信息其中一条没有成功删除的话,那么就都不删除。

        他们就像加盟了某个组织,他们都很讲义气,要死他们一起死,要活一起活,谁也不会落下。现在是在java中要对数据库实现这一操作,我们可看下面的代码,它实现了对数据库的批量删除操作,并且同生死,代码如下:

/**
	 * 根据用户代码进行批量删除
	 * @param userIds
	 * @return
	 */
	public boolean delUsers(String[] userIds){
		boolean flag = false;
		Connection conn = null;
		PreparedStatement pstmt = null;  
		String sql = "delete from t_user where user_id=?";
		try {
			conn = DbUtil.getConnection();
			conn.setAutoCommit(false);
			pstmt = conn.prepareStatement(sql);
			for(int i =0 ;i<userIds.length;i++){ 
				pstmt.setString(1,userIds[i].trim());
				pstmt.addBatch();				
			} 
			pstmt.executeBatch(); //批量执行 
			conn.commit();//提交事务
			flag = true;
		} catch (SQLException e) {
			try {
				conn.rollback(); //进行事务回滚
			} catch (SQLException ex) { 
			} 
		}finally {
			DbUtil.close(pstmt);
			DbUtil.close(conn);
		} 
		return flag;
	}
当然上面是进行批量删除,如果我们只删除一条信息的话也可以使用单独的删除方法,当然上面的方法也是可以完成的,管他的,还是再看一下吧:

/**
	 * 根据用户id进行删除单条信息 
	 * @param userId
	 * @return
	 */
	public boolean delUser(String userId){
		boolean flag = false;
		String sql = "delete from t_user where user_id=?";
		Connection conn = null;
		PreparedStatement pstmt = null;
		try {
			conn = DbUtil.getConnection();
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, userId);
			if(pstmt.executeUpdate()>0){
				flag = true;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			DbUtil.close(pstmt);
			DbUtil.close(conn);
		} 
		return flag;
	}
上面是对数据库的操作代码,下面看一下页面中怎样实现的,代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="org.ml.drp.sysmgr.domain.*"%>
<%@ page import="org.ml.drp.sysmgr.manager.*" %>
<%@ page import="org.ml.drp.util.*"%>  
<%@ page import="java.util.*"%>  
<%
	String path = request.getContextPath();
	String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 
	//进行用户信息的删除 
	String command = request.getParameter("command");
	if ("del".equals(command)) {
		String[] userIds = request.getParameterValues("selectFlag");
		boolean flag = false;
		if(userIds.length==1){
			flag = UserManager.getInstance().delUser(userIds[0]);
		}else{
			flag = UserManager.getInstance().delUsers(userIds);
		} 
		if(flag){
			out.print("<script>alert('删除成功!');</script>"); 
		}else{
			out.print("<script>alert('删除失败!');</script>"); 
		}
	}
	
	//下面为分页显示做准备 
	String currentPageStr = request.getParameter("currentPage");
	String pageSizeStr = request.getParameter("pageSize");
	int currentPage = 1; //当前页码 
	int pageSize = 8 ;//每页显示数量 
	if(currentPageStr!=null){
		currentPage = Integer.parseInt(currentPageStr);
	}
	if(pageSizeStr!=null){
		pageSize = Integer.parseInt(pageSizeStr);
	}
	Page<User> p = UserManager.getInstance().findByPage(currentPage,pageSize);
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>用户维护</title>
			<link rel="stylesheet" href=&qu