本文是記錄Java中實(shí)現(xiàn)批量刪除操縱(Java對(duì)數(shù)據(jù)庫進(jìn)行事務(wù)處置),在開始之前先來看上面這樣的一個(gè)頁面圖:
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、虛擬主機(jī)、營(yíng)銷軟件、網(wǎng)站建設(shè)、雞西梨樹網(wǎng)站維護(hù)、網(wǎng)站推廣。
上面這張圖片表現(xiàn)的是從數(shù)據(jù)庫中查詢出的出租信息,信息中進(jìn)行了分頁處置,然后每行的后面提供了一個(gè)復(fù)選按鈕和對(duì)應(yīng)的一個(gè)刪除操縱,可以選中多個(gè)進(jìn)行操縱,這里主要是進(jìn)行刪除操縱。在執(zhí)行刪除操縱之前先要選中對(duì)應(yīng)的行信息,點(diǎn)擊刪除選中按鈕進(jìn)行刪除。當(dāng)進(jìn)行多條信息刪除的時(shí)候,需要使用java的事務(wù)處置機(jī)制對(duì)數(shù)據(jù)庫進(jìn)行刪除,也就是說刪除的時(shí)候如果選中的要?jiǎng)h除的說有信息其中一條沒有成功刪除的話,那么就都不刪除。
現(xiàn)在是在java中對(duì)數(shù)據(jù)庫實(shí)現(xiàn)這一操縱,我們可看上面的代碼,它實(shí)現(xiàn)了對(duì)數(shù)據(jù)庫的批量刪除操縱,代碼如下:
public Connection con=null;
public PreparedStatement pstmt=null;
/**
* 失掉連接對(duì)象
*/
public void getConnection(){
String driver="com.mysql.jdbc.Driver";
String url="jdbc:mysql://localhost:3306/zufang?user=rootpassword=rootuseUnicode=truecharacterEncoding=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 ;iparam.length;i++){ pstmt.setString(1,param[i].trim()); pstmt.addBatch(); } pstmt.executeBatch(); //批量執(zhí)行 con.commit();//提交事務(wù) flag = true; } catch (SQLException e) { try { con.rollback(); //進(jìn)行事務(wù)回滾 } catch (SQLException ex) { ex.printStackTrace(); } }finally { closeAll(null,pstmt,con); } return flag; }
當(dāng)然上面是進(jìn)行批量刪除,如果我們只刪除一條信息的話也可以使用獨(dú)自的刪除方法,即是:點(diǎn)擊刪除,當(dāng)然上面的方法也是可以完成的,還是再看一下吧:
/**
* 刪除某條求租表中的信息
* @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("scriptalert('刪除成功!');/script"); ?
? ? ? ?}else{ ?
? ? ? ? ? ?out.print("scriptalert('刪除失?。?);/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);
}
}
上面是對(duì)數(shù)據(jù)庫的操縱代碼,上面看一下頁面中怎樣實(shí)現(xiàn)的,代碼如下:
每日一道理?
燈,帶有一種明亮的光,每當(dāng)深夜來臨,是它陪伴著你,如此默默無聞。它是平凡的,外表華麗與否,那都是一樣的,珍珠點(diǎn)綴,水晶加飾的燈它只能用以裝飾,來滿足人們的虛榮心,比起這,普普通通的日光燈是幸運(yùn)的,因?yàn)樗彰鞯谋拘詻]有改變,如同生活中的一部分人平平凡凡卻實(shí)實(shí)在在。
%@ page language="java" import="java.util.*" pageEncoding="GB18030"%
%@ taglib uri="#" ?prefix="c" %
html
head
titlehouse/title
script type="text/javascript"
//刪除用戶控制 ?
function deleteSelect() { ?
? ?var select ?= document.getElementsByName("selectFlag"); ?
? ?var flag = false; ?
? ?for (var i=0; iselect.length; i++) { ?
? ? ? ?if (select[i].checked) { ?
? ? ? ? ? ?flag = true; ?
? ? ? ? ? ?break; ?
? ? ? ?} ?
? ?} ?
? ?if (!flag) {
? ? alert("請(qǐng)選擇需要?jiǎng)h除的過期求租信息!"); ?
? ? ? ?return; ?
? ?} ?
? ?if (window.confirm("確認(rèn)要?jiǎng)h除過期的求租信息嗎?")) { ?
? ? ? ?with (document.getElementById("userform")) { ?
? ? ? ? ? ?action="OutDateQiuzuServlet?command=del"; ?
? ? ? ? ? ?method="post"; ?
? ? ? ? ? ?submit(); ?
? ? ? ?} ?
? ?} ?
}
//全選/反選操縱 ? ?
function checkAll(ifAll) {
var select = document.getElementsByName("selectFlag"); ?
? ? ? ?for(var i = 0;iselect.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"http://font/td
td width="10%" bgcolor="#F1F1F1"font size="3"期望區(qū)域/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"價(jià)格(元)/font/td
td width="10%" bgcolor="#F1F1F1"font size="3"添加日期/font/td
td width="10%" bgcolor="#F1F1F1"font size="3"有效天數(shù)/font/td
td width="10%" bgcolor="#F1F1F1"font size="3"殘余天數(shù)/font/td
/tr
c:choose
c:when test="${empty list1}"
trtd 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"http://font
?a href="javascript:if(confirm('確定要?jiǎng)h除這條過期的求租信息嗎?')){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
刪除文件夾下的所有文件需要用到j(luò)ava.io.File類的各個(gè)方法,并需要使用簡(jiǎn)單的遞歸算法。
示例代碼如下:
import java.io.File;
public class Test
{
public static void main(String args[]){
Test t = new Test();
delFolder("c:/bb");
System.out.println("deleted");
}
//刪除文件夾
//param folderPath 文件夾完整絕對(duì)路徑
public static void delFolder(String folderPath) {
try {
delAllFile(folderPath); //刪除完里面所有內(nèi)容
String filePath = folderPath;
filePath = filePath.toString();
java.io.File myFilePath = new java.io.File(filePath);
myFilePath.delete(); //刪除空文件夾
} catch (Exception e) {
e.printStackTrace();
}
}
//刪除指定文件夾下所有文件
//param path 文件夾完整絕對(duì)路徑
public static boolean delAllFile(String path) {
boolean flag = false;
File file = new File(path);
if (!file.exists()) {
return flag;
}
if (!file.isDirectory()) {
return flag;
}
String[] tempList = file.list();
File temp = null;
for (int i = 0; i tempList.length; i++) {
if (path.endsWith(File.separator)) {
temp = new File(path + tempList[i]);
} else {
temp = new File(path + File.separator + tempList[i]);
}
if (temp.isFile()) {
temp.delete();
}
if (temp.isDirectory()) {
delAllFile(path + "/" + tempList[i]);//先刪除文件夾里面的文件
delFolder(path + "/" + tempList[i]);//再刪除空文件夾
flag = true;
}
}
return flag;
}
}
import java.io.File;
/**
* 刪除文件和目錄
*
*/
public class DeleteFileUtil {
/**
* 刪除文件,可以是文件或文件夾
*
* @param fileName
* 要?jiǎng)h除的文件名
* @return 刪除成功返回true,否則返回false
*/
public static boolean delete(String fileName) {
File file = new File(fileName);
if (!file.exists()) {
System.out.println("刪除文件失敗:" + fileName + "不存在!");
return false;
} else {
if (file.isFile())
return deleteFile(fileName);
else
return deleteDirectory(fileName);
}
}
/**
* 刪除單個(gè)文件
*
* @param fileName
* 要?jiǎng)h除的文件的文件名
* @return 單個(gè)文件刪除成功返回true,否則返回false
*/
public static boolean deleteFile(String fileName) {
File file = new File(fileName);
// 如果文件路徑所對(duì)應(yīng)的文件存在,并且是一個(gè)文件,則直接刪除
if (file.exists() file.isFile()) {
if (file.delete()) {
System.out.println("刪除單個(gè)文件" + fileName + "成功!");
return true;
} else {
System.out.println("刪除單個(gè)文件" + fileName + "失敗!");
return false;
}
} else {
System.out.println("刪除單個(gè)文件失敗:" + fileName + "不存在!");
return false;
}
}
/**
* 刪除目錄及目錄下的文件
*
* @param dir
* 要?jiǎng)h除的目錄的文件路徑
* @return 目錄刪除成功返回true,否則返回false
*/
public static boolean deleteDirectory(String dir) {
// 如果dir不以文件分隔符結(jié)尾,自動(dòng)添加文件分隔符
if (!dir.endsWith(File.separator))
dir = dir + File.separator;
File dirFile = new File(dir);
// 如果dir對(duì)應(yīng)的文件不存在,或者不是一個(gè)目錄,則退出
if ((!dirFile.exists()) || (!dirFile.isDirectory())) {
System.out.println("刪除目錄失?。? + dir + "不存在!");
return false;
}
boolean flag = true;
// 刪除文件夾中的所有文件包括子目錄
File[] files = dirFile.listFiles();
for (int i = 0; i files.length; i++) {
// 刪除子文件
if (files[i].isFile()) {
flag = DeleteFileUtil.deleteFile(files[i].getAbsolutePath());
if (!flag)
break;
}
// 刪除子目錄
else if (files[i].isDirectory()) {
flag = DeleteFileUtil.deleteDirectory(files[i]
.getAbsolutePath());
if (!flag)
break;
}
}
if (!flag) {
System.out.println("刪除目錄失??!");
return false;
}
// 刪除當(dāng)前目錄
if (dirFile.delete()) {
System.out.println("刪除目錄" + dir + "成功!");
return true;
} else {
return false;
}
}
public static void main(String[] args) {
// // 刪除單個(gè)文件
// String file = "c:/test/test.txt";
// DeleteFileUtil.deleteFile(file);
// System.out.println();
// 刪除一個(gè)目錄
String dir = "D:/home/web/upload/upload/files";
DeleteFileUtil.deleteDirectory(dir);
// System.out.println();
// // 刪除文件
// dir = "c:/test/test0";
// DeleteFileUtil.delete(dir);
}
}