1. 程式人生 > >Java中怎樣實現批量刪除操作(Java對資料庫進行事務處理)?

Java中怎樣實現批量刪除操作(Java對資料庫進行事務處理)?

本人開發的一個安卓版app小遊戲,瘋狂猜明星android版,圖示看起來很搞笑,有點京劇變臉的味道。朋友們小手一抖,下載支援下。謝謝了大笑

本文是記錄Java中實現批量刪除操作(Java對資料庫進行事務處理),在開始之前先來看下面這樣的一個頁面圖:

 上面這張圖片顯示的是從資料庫中查詢出的出租資訊,資訊中進行了分頁處理,然後每行的前面提供了一個複選按鈕和對應的一個刪除操作,可以選中多個進行操作,這裡主要是進行刪除操作。在執行刪除操作之前先要選中對應的行資訊,點選刪除選中按鈕進行刪除。當進行多條資訊刪除的時候,需要使用java的事務處理機制對資料庫進行刪除,也就是說刪除的時候如果選中的要刪除的說有資訊其中一條沒有成功刪除的話,那麼就都不刪除。


現在是在java中對資料庫實現這一操作,我們可看下面的程式碼,它實現了對資料庫的批量刪除操作,程式碼如下:

public Connection con=null;
	public PreparedStatement pstmt=null;
	/**
	 * 得到連線物件
	 */
	public void getConnection(){
		String driver="com.mysql.jdbc.Driver";
		String url="jdbc:mysql://localhost:3306/zufang?user=root&password=root&useUnicode=true&characterEncoding=GB2312";
		try {
			Class.forName(driver);
			con=DriverManager.getConnection(url,"root","root");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}


/**
	 * 批量刪除資訊表中的資訊
	 * @param sql
	 * @param param
	 * @return
	 */
	public boolean updateBatchDel(String sql,String[] param){
		 boolean flag = false;
		 getConnection();  
		 try { 
	            con.setAutoCommit(false);  
	            pstmt = con.prepareStatement(sql);  
	            for(int i =0 ;i<param.length;i++){   
	                pstmt.setString(1,param[i].trim());  
	                pstmt.addBatch();                 
	            }   
	            pstmt.executeBatch(); //批量執行   
	            con.commit();//提交事務  
	            flag = true;  
	        } catch (SQLException e) {  
	            try {  
	                con.rollback(); //進行事務回滾  
	            } catch (SQLException ex) { 
	            	ex.printStackTrace();
	            }   
	        }finally {  
	        	closeAll(null,pstmt,con);  
	        } 
	        return flag;
	}
當然上面是進行批量刪除,如果我們只刪除一條資訊的話也可以使用單獨的刪除方法,即是:點選刪除,當然上面的方法也是可以完成的,還是再看一下吧:
/**
	 * 刪除某條求租表中的資訊
	 * @param id 刪除資訊的id
	 * @return 如果刪除成功,返回true;否則返回false
	 */
	public boolean delQiuZu(String id){
		boolean flag=false;
		String sql="delete from qiuzhu where id=?";
		String[] param={id};
		flag=bd.updateDate(sql, param);
		return flag;
	}

控制器servlet中的處理操作程式碼如下:

package com.sxt.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.sxt.biz.ChuZuBiz;
import com.sxt.biz.PageBiz;
import com.sxt.biz.QiuZuBiz;

public class OutDateQiuzuServlet extends HttpServlet {
	QiuZuBiz qzb=new QiuZuBiz();
	PageBiz pb=new PageBiz();
	int pagesize=10;
	boolean flag=true;
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("gb2312");
		response.setContentType("text/html;charset=gb2312");
		int countpage=pb.getOutDatePageCountQiuzu(pagesize);
		request.setAttribute("countpage", countpage);
		String nowpage=request.getParameter("nowpage");
		String id=request.getParameter("id");
		PrintWriter out = response.getWriter();
		String command = request.getParameter("command");
		 
		    if ("del".equals(command)) {  
		        String[] qiuzuIds = request.getParameterValues("selectFlag");
		        boolean flag = qzb.delQiuzuMany(qiuzuIds);
		        if(flag){  
		            out.print("<script>alert('刪除成功!');</script>");   
		        }else{  
		            out.print("<script>alert('刪除失敗!');</script>");   
		        }  
		    }  
		
		if(nowpage==null){
			nowpage="1";
		}
		if(Integer.valueOf(nowpage)<=0){
			nowpage="1";
		}
		if(Integer.valueOf(nowpage)>countpage){
			nowpage=countpage+"";
		}
		if(id!=null){
			flag=qzb.delQiuZu(id);
		}
		request.setAttribute("currentpage", nowpage);
		List list=qzb.getOutDateQiuZuInfo(Integer.valueOf(nowpage), pagesize);
		request.setAttribute("list1", list);
		if(flag){
			request.getRequestDispatcher("admin/OutDateQiuzu.jsp").forward(request, response);			
		}
	}

	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doGet(request,response);
	}

}


上面是對資料庫的操作程式碼,下面看一下頁面中怎樣實現的,程式碼如下:
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c" %>
<html>
  <head>
  	<title>house</title>
  	<script type="text/javascript">
  	//刪除使用者控制   
    function deleteSelect() {   
        var select  = document.getElementsByName("selectFlag");  
        var flag = false;  
        for (var i=0; i<select.length; i++) {  
            if (select[i].checked) {  
                flag = true;  
                break;  
            }  
        }  
        if (!flag) { 
         	 alert("請選擇需要刪除的過期求租資訊!");  
            return;  
        }  
        if (window.confirm("確認要刪除過期的求租資訊嗎?")) {  
            with (document.getElementById("userform")) {  
                action="OutDateQiuzuServlet?command=del";  
                method="post";  
                submit();  
            }  
        }  
    } 
    
    //全選/反選操作     
    function checkAll(ifAll) { 
    		 var select = document.getElementsByName("selectFlag");  
    	        for(var i = 0;i<select.length;i++){  
    	            select[i].checked = ifAll.checked;  
    	        }       
    } 
    </script> 
  </head>
  <link rel="stylesheet" href="./skin/css/lianjie.css" type="text/css" />
  <body>
  	<form name="userform" action="ChuzuServlet" method="get">
  	<table width="1000" height="80" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
  		<tr>
  			<td height="40" align="center" bgcolor="#F1F1F1"><font color="#FF0000"><b>已過期的求租資訊</b></font></td>
  		</tr>
  		<tr>
  			<td align="left">
  			    <input name="btnDelete" class="button1" type="button"  
            id="btnDelete" value="刪除選中" onClick="deleteSelect()">  
  			</td>
  		</tr>
  	</table>
     <table width="1000" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC" style="word-break:break-all;"> 
     	<tr align="center">
     		<td width="15%" height="25" bgcolor="#F1F1F1"><font size="3"> <input type="checkbox" name="ifAll" title="全選/反選"  onClick="checkAll(this)" checked="checked"/></font></td>
     		<td width="10%" bgcolor="#F1F1F1"><font size="3">期望區域</font></td>
     		<td width="15%" bgcolor="#F1F1F1"><font size="3">裝修程度</font></td>
     		<td width="10%" bgcolor="#F1F1F1"><font size="3">房型</font></td>
     		<td width="10%" bgcolor="#F1F1F1"><font size="3">面積(平米)</font></td>
     		<td width="10%" bgcolor="#F1F1F1"><font size="3">價格(元)</font></td>
     		<td width="10%" bgcolor="#F1F1F1"><font size="3">新增日期</font></td>
     		<td width="10%" bgcolor="#F1F1F1"><font size="3">有效天數</font></td>
     		<td width="10%" bgcolor="#F1F1F1"><font size="3">剩餘天數</font></td>
     	</tr>
     	<c:choose>
				<c:when test="${empty list1}">
				<tr><td colspan="8" align="center"><font color="red">還沒有過期的求租資訊!</font></td></tr>
				</c:when>
				<c:otherwise>
     	<c:forEach var="qiuzu" items="${list1}" >
     		<tr>
     			<td height="25" align="center" bgcolor="#FFFFFF"><input type="checkbox" name="selectFlag" value="${qiuzu.id}" checked="checked"/></font>
     			 <a href="javascript:if(confirm('確定要刪除這條過期的求租資訊嗎?')){location.href='OutDateQiuzuServlet?id=${qiuzu.id}'}" style="COLOR: #0000ff;font-size:14px; TEXT-DECORATION:none;"><font size="2">刪除</font></a></td>
     			<td align="center" bgcolor="#FFFFFF"><font size="2">${qiuzu.qwqy}</font></td>
     			<td align="center" bgcolor="#FFFFFF"><font size="2">${qiuzu.zxcd}</font></td>
     			<td align="center" bgcolor="#FFFFFF"><font size="2">${qiuzu.hx}</font></td>
     			<td align="center" bgcolor="#FFFFFF"><font size="2">${qiuzu.jzmj}</font></td>
     			<td align="center" bgcolor="#FFFFFF"><font size="2">${qiuzu.zj}</font></td>
     			<td align="center" bgcolor="#FFFFFF"><font size="2">${qiuzu.addDate}</font></td>
     			<td align="center" bgcolor="#FFFFFF"><font size="2">${qiuzu.yxts}</font></td>
     			<td align="center" bgcolor="#FFFFFF"><font size="2" color="red">${qiuzu.syts}</font></td>
     			
     		</tr>
     	</c:forEach>
     	</c:otherwise>
		</c:choose>
     </table>
     </p>
     <table width="300" align="center" >
     	<tr>
     		<td align="center"><font size="2">共${countpage}頁</font></td>
     		<td align="center"><font size="2">${currentpage}/${countpage}頁</font></td>
     		<td align="center"><a href="OutDateQiuzuServlet?nowpage=${1}"><font size="2">首頁</font></a></td>
     		<td align="center"><a href="OutDateQiuzuServlet?nowpage=${currentpage-1}"><font size="2">上一頁</font></a></td>
     		<td align="center"><a href="OutDateQiuzuServlet?nowpage=${currentpage+1}"><font size="2">下一頁</font></a></td>
     		<td align="center"><a href="OutDateQiuzuServlet?nowpage=${countpage}"><font size="2">尾頁</font></a></td>
     	</tr>
     </table>
     </form>
   </body>
</html>

相關推薦

Java怎樣實現批量刪除操作Java資料庫進行事務處理?

本人開發的一個安卓版app小遊戲,瘋狂猜明星android版,圖示看起來很搞笑,有點京劇變臉的味道。朋友們小手一抖,下載支援下。謝謝了 本文是記錄Java中實現批量刪除操作(Java對資料庫進行事務處理),在開始之前先來看下面這樣的一個頁面圖:  上面這張圖片顯示的是從

Android開發基礎 呼叫相機 系統相簿圖片進行壓縮處理

前言:做了好久的安卓開發了,一直想寫點東西分享下。但是又總覺得自己學的還不夠好,說出來有可能會誤導人,所以一直都沒有發. 最近在專案中遇到了最多的問題就是關於圖片的問題,應該算是比較簡單的了,拿出來跟大家分享下。(第一次寫部落格,希望給位大神能夠多提意見^_^)

關於Java的遞迴操作--以將一個正整型十進位制數轉換為二進位制數為例

遞迴操作是函式一直在呼叫自身的一種方法,它通常把一個大型複雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的程式

+Java的native關鍵字淺析Java+Native+Interface++

JNI是Java Native Interface的 縮寫。從Java 1.1開始,Java Native Interface (JNI)標準成為java平臺的一部分,它允許Java程式碼和其他語言寫的程式碼進行互動。JNI一開始是為了本地已編譯語言,尤其是C和C++而設

Mybatis實現批量刪除操作

一. 這裡主要考慮兩種引數型別:陣列或者集合. 而這點區別主要體現在EmpMapper.xml檔案中標籤的collection屬性: 當collection=”array“時,表名引數為陣列; 當

Java web實現簡登入頁面MyBatis+jsp+servlet+html+css+javascript附原始碼

本文利用MyBatis+jsp+servlet+html+css+javascript實現了一個簡單的登入頁面。對使用者輸入的使用者名稱和密碼就行校驗,校驗通過則登入成功,密碼和使用者資訊儲存在mysql表中,通過MyBatis訪問(MyBatis相關知識可參考先前的文章My

SSM框架實現批量刪除操作

JSP頁面 <table> <tr> <th><input id="all" type="checkbox" /></th> &

jsp實現批量刪除

<%@ page language="java" import="java.util.*,java.sql.*,com.it.bean.*" pageEncoding="utf-8"%> <jsp:useBean id="common" class="com.it.bean.pageinfo

Java的多執行緒五大經典同步問題Scenario等

WhatA thread is a lightweight sub process, a smalleset unit of processing. It is a separate path of execution. 每個執行緒是獨立的,如果一個執行緒發生了異常是不會影響

微信小程式向左滑動刪除操作類仿微信、QQ

上一個小程式的專案裡面做過這個功能,當時沒有記錄下來,今天特意做了一個小的demo放在了github上面,下次在開發中遇到的話就可以直接拿下來程式碼複用了。效果很簡單,類似於微信扣扣刪除聊天欄的效果,想左滑動,出現刪除按鈕,點選即可刪除。 github地址:https://github

二叉搜尋樹的查詢、插入與刪除操作Binary Search Tree, Search, Insert, DeleteC++

一、概念     設 x 是二叉搜尋樹中的一個結點。如果 y 是 x 左子樹中的一個結點,那麼 y.key ≦ x.key。如果 y 是 x 右子樹中的一個結點,那麼 y.key ≧ x.key。  

Python的檔案IO操作讀寫檔案、追加檔案

【注】:下述操作過程是結合多種網路方法,然後自己實踐的結果。寫在這裡,主要目的是加深記憶,也希望能幫助後來者 Python中檔案的讀寫包含三個步驟:開啟檔案,讀/寫檔案,關閉檔案。 檔案開啟之後必

ElasticSearch學習Java應用實現批量操作mget&bulk和查詢刪除、match_all查詢所有

//mget批量查詢 @Test public void test6() throws Exception { //指定ES叢集 Settings settings = Settings.builder().put("clus

JAVA資料庫進行操作實現資料庫資料的插入,查詢,更改,刪除操作

轉載自:http://www.cnblogs.com/sodawoods-blogs/p/4415858.html (—)通過mysql workbench 建立一個數據庫,在這裡命名為company,然後建一個tb_employee表 (二)以下是java程式碼對錶

java實現堆的操作建堆,插入,刪除

import java.util.Arrays; //小頂堆的程式碼實現 public class Heap { // 向下調整,頂端的大值往下調,主要用於刪除和建堆,i表示要調整的節點索引,n表示堆的最有一個元素索引 // 刪除時候,i是0,建堆時候i從最後一個節

【小家java】 Restful風格的API設計,怎麼實現批量刪除

相關閱讀 每篇一句 面試高大上,面試造飛機,工作擰螺絲 因此不能以為自己工作覺得還OK,就覺得自己技術還不錯了 如題,指的是在restful風格的url設計中,怎麼實現批量刪除呢? 這裡指的刪除是真刪除,不是邏輯刪除。如果是邏輯刪除,其實就是upd

求較大整數n的階乘,因為n較大時n的階乘超出了正常類型的表示範圍,采用數組進行操作java實現

階乘 大數字package net.yk.mlgorithm; /** * 求較大數的階乘 * @author Administrator * * @param <T> */ public class ArraysMul<T> { public static void

JAVA循環刪除list元素的方法總結跳格刪除問題解決

今天 src log 觸發 導致 spi als exceptio spa  印象中循環刪除list中的元素使用for循環的方式是有問題的,但是可以使用增強的for循環,然後今天在使用時發現報錯了,然後去科普了一下,再然後發現這是一個誤區。下面就來講一講。。伸手黨可直接跳至

java實現時間的操作

所屬類別:類的成員變數與方法、構造方法 題目: 在程式中經常要對時間進行操作但是並沒有時間型別的資料。 那麼我們可以自己實現一個時間類來滿足程式中的需要。  定義名為MyTime的類其中應有三個整型成員時hour分minute秒second為了保證資料的安全性這三個成員

易學筆記-0:Java語言總結/0.11 Java輸出的流表示都是針對位元組陣列byte[ ]操作

Java中輸出的流表示 針對快取的: ByteArrayOutputStream StringBufferOutputStream 針對檔案的:FileOutputStream 針對物件:ObjectOutputStream