扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
进行编写编程代码就能实现批量删除操作。
创新互联长期为近1000家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为集贤企业提供专业的网站建设、网站设计,集贤网站改版等技术服务。拥有十余年丰富建站经验和众多成功案例,为您定制开发。
具体代码如下:
[java] SPAN style="WHITE-SPACE: pre" /SPANpublic Connection con=null;
public PreparedStatement pstmt=null;
/**
* 得到连接对象
*/
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();
}
}
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=rootpassword=rootuseUnicode=truecharacterEncoding=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 ;iparam.length;i++){
pstmt.setString(1,param[i].trim());
pstmt.addBatch();
}
pstmt.executeBatch(); //批量执行
con点抗 mit();//提交事务
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 ;iparam.length;i++){
pstmt.setString(1,param[i].trim());
pstmt.addBatch();
}
pstmt.executeBatch(); //批量执行
con点抗 mit();//提交事务
flag = true;
} catch (SQLException e) {
try {
con.rollback(); //进行事务回滚
} catch (SQLException ex) {
ex.printStackTrace();
}
}finally {
closeAll(null,pstmt,con);
}
return flag;
上面是进行批量删除的编程码。
同意用存储过程。用存储过程的时候,你可以定义Handler,可以根据SQLSTATE来判断,如果发现删除失败,而且是由于外键引起的(有对应的SQLSTATE代码的,不同sql方言可能不同),那么就不能删除。可以返回错误代码
另外,JAVA里面,其实你只要catch到sqlexception,管它是什么错误呢?如果SQLEXCEPTION发生(1是SQL系统挂了,你的例子中2 是由于删除失败(外键)。不管什么情况,都表征失败了。不就可以了?
根据ER图来判断是否有外键,这样可行吗?
这样JAVA代码就要依靠ER图了,实际开发中,这种后期维护挺不容易的。尽量要避免这种代码依赖。
我会将在编写过程中出现的一些小知识点也进行总结概括的。
此项目基于的框架是:springmvc+mybatis
(1)controller
/**
* 批量删除 batch
*/
@RequestMapping("/batchDeletes")
@ResponseBody
public void batchDeletes(HttpServletRequest request,HttpServletResponse response){
String items = request.getParameter("delitems");
ListString delList = new ArrayListString();
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,相信大家都明白,就不再过多解释了。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流