具体代码如下:
[java] <SPAN style="WHITE-SPACE: pre"></SPAN>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()
}
}
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()
}
}
[java] <SPAN style="WHITE-SPACE: pre"></SPAN>/**
* 批量删除信息表中的信息
* @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.lengthi++){
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 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.lengthi++){
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
上面是进行批量删除的编程码。
本文是记录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 = falsegetConnection()try { con.setAutoCommit(false)pstmt = con.prepareStatement(sql)for(int i =0 i<param.lengthi++){ 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/htmlcharset=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="#" prefix="c" %>
<html>
<head>
<title>house</title>
<script type="text/javascript">
//删除用户控制
function deleteSelect() {
var select = document.getElementsByName("selectFlag")
var flag = false
for (var i=0i<select.lengthi++) {
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 = 0i<select.lengthi++){
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: #0000fffont-size:14pxTEXT-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>
我会将在编写过程中出现的孝判一些小知识点也进行总结概括的。此项目基于的框架是:springmvc+mybatis
(1)controller
/**
* 批量删除 batch
*/
@RequestMapping("/batchDeletes")
@ResponseBody
public void batchDeletes(HttpServletRequest request,HttpServletResponse response){
String items = request.getParameter("delitems")
List<String>delList = new ArrayList<String>()
String[] strs = items.split(",")
for (String str : strs) {
delList.add(str)
}
userService.batchDeletes(delList)
}
代码思路:
从前台勾选的选择框中传过来的值用“,”分开,然后遍历存放到delList集合里面,直接删delList集合里面的所有字符串。
(2)service
/**
* 批量删除
*/
void batchDeletes(List delList)
(3)impl
/**
* 批量删除
*/
@Override
public void batchDeletes(List delList) {
userMapper.batchDeletes(delList)
}
(4)mapper
/**
* 批量删除
*/
void batchDeletes(List delList)
(5)mapper.xml
<!--批量删除 -->
<delete id="batchDeletes" parameterType="java.util.List">
DELETE FROM tp_user where uname in
<foreach collection="list" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</delete>
如上的mybatis指代的意思如下:
foreach元素的属性主要有 item,index,collection,open,separator,close。
item表示集合中每一个元素进行迭代时的别名. (直接找到对应的delList集合里面的所有元素,item="item"中的item(后一个)必须与#{item} 中的item一致)
index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置.
open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔 符.
close表示以什么结束.
前台代码:
user_list.jsp
//全选
function selectAll(){
if ($("#SelectAll").is(":checked")) {
$(":checkbox").prop("checked", true)//所有选择框都选巧拿改中
} else {
$(":checkbox").prop("checked", false)
}
}
//批量删除
function batchDeletes(){
//判断至少写了一项
var checkedNum = $("input[name='subcheck']:checked").length
if(checkedNum==0){
alert("请敏察至少选择一项!")
return false
}
if(confirm("确定删除所选项目?")){
var checkedList = new Array()
$("input[name='subcheck']:checked").each(function(){
checkedList.push($(this).val())
})
$.ajax({
type:"POST",
url:"web/user/batchDeletes.action",
data:{"delitems":checkedList.toString()},
datatype:"html",
success:function(data){
$("[name='checkbox2']:checkbox").attr("checked",false)
art.dialog.tips('删除成功!')
setTimeout("location.reload()",1000)//页面刷新
},
error:function(data){
art.dialog.tips('删除失败!')
}
})
}
}
<table class="tb_list">
<tr>
<td align="center"><input type="checkbox" id="SelectAll"
onclick="selectAll()" />全选</td>
<th>序号</th>
</tr>
<c:forEach items="${page.list }" var="items" varStatus="idx">
<tr class="row_${idx.count%2+1}">
<td style="display:none">${batch.id}</td>
<td align="center"><input type="checkbox" id="subcheck"
name="subcheck" value="${items.UNAME }" />
</td>
<td>${page.onePageCount*(page.currentPage-1)+idx.count }</td>
<tr>
</table>
备注:此代码我传值的主键是用uname来删除的,实际应该用id作为主键,因为id的unique
,uname若重名,则就会出现bug,相信大家都明白,就不再过多解释了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)