`

一个JDBC实现批量删除的例子

阅读更多

数据库:SQLServer2005
服务器:Tomcat6.0
开发工具:MyEclipse6.0
采用框架:Struts1.2

贴出完整代码 :

创建SQL脚本:
CREATE TABLE [dbo].[batch](
 [id] [int] IDENTITY(1,1) NOT NULL,
 [name] [varchar](50) NULL,
 [password] [varchar](50) NULL,
 CONSTRAINT [PK_batch] PRIMARY KEY CLUSTERED
(
 [id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

连接数据库类:
public class DBConnection {
 private static DBConnection dbc = null;

 public static Connection getDBConnection() throws Exception {
  if (dbc == null) {
   dbc = new DBConnection();
  }
  return dbc._getConnection();
 }

 public Connection _getConnection() throws Exception {
  Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
  return DriverManager.getConnection(
    "jdbc:sqlserver://localhost:1433;DatabaseName=dbtest", "sa",
    "sqlserver2005");
 }
}

采用DAO工厂模式:

PO类:
public class Batch {
 private int id;
 private String name;
 private String password;

 public int getId() {
  return id;
 }

 public void setId(int id) {
  this.id = id;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public String getPassword() {
  return password;
 }

 public void setPassword(String password) {
  this.password = password;
 }
}

DAO接口:

public interface BatchDAO {
 public List<Batch> queryAll();

 public void deleteSelect(int[] str);
}

实现接口类:

public class BatchDAOImpl implements BatchDAO {
 Connection con = null;
 PreparedStatement pst = null;
 ResultSet rst = null;

 public void deleteSelect(int[] str) {
  String sql = "delete from batch where id in(";
  if(str.length==1){
   sql=sql+str[0]+")";}else{
    for(int i=0;i<str.length;i++){
     if(i==0){
      sql=sql+str[0];
     }
     else if(i==str.length-1){
      sql=sql+","+str[i]+")";
     }else{
      sql=sql+","+str[i];
     }
    }
   }
  try {
   con = DBConnection.getDBConnection();
   pst = con.prepareStatement(sql);
   pst.execute();
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   try {
    if (pst != null)
     pst.close();
    if (con != null)
     con.close();
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
 }

 public List<Batch> queryAll() {
  List<Batch> list = new ArrayList<Batch>();
  String sql = "select * from batch";
  try {
   con = DBConnection.getDBConnection();
   pst = con.prepareStatement(sql);
   rst = pst.executeQuery();
   while (rst.next()) {
    Batch b = new Batch();
    b.setId(rst.getInt("id"));
    b.setName(rst.getString("name"));
    b.setPassword(rst.getString("password"));
    list.add(b);
   }
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   try {
    if (rst != null)
     rst.close();
    if (pst != null)
     pst.close();
    if (con != null)
     con.close();
   } catch (SQLException e) {
    e.printStackTrace();
   }
  }
  return list;
 }
}

工厂类:

public class DAOFactory {
 public static BatchDAO getBatchDAOImplInstance() {
  return new BatchDAOImpl();
 }
}

Action:继承DispatchAction

public class BatchAction extends DispatchAction {
 /*
  * Generated Methods
  */

 /**
  * Method execute
  *
  * @param mapping
  * @param form
  * @param request
  * @param response
  * @return ActionForward
  */
 public ActionForward queryAll(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {
  List<Batch> list = DAOFactory.getBatchDAOImplInstance().queryAll();
  request.setAttribute("list", list);
  return mapping.findForward("display");
 }

 public ActionForward deleteSelect(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {
  String[] id = request.getParameterValues("name");
  int[] i = new int[id.length];
  for (int j = 0; j < id.length; j++) {
   i[j] = Integer.parseInt(id[j]);
  }
  DAOFactory.getBatchDAOImplInstance().deleteSelect(i);
  return mapping.findForward("delete");
 }
}
struts-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>
  <data-sources />
  <form-beans />
  <global-exceptions />
  <global-forwards />
  <action-mappings >
    <action
      input="/index.jsp"
      parameter="batch"
      path="/batch"
      type="com.batch.delete.struts.action.BatchAction"
      validate="false">
      <forward name="display" path="/batchList.jsp" />
      <forward name="delete" path="/batchList.jsp" />
    </action>

  </action-mappings>

  <message-resources parameter="com.batch.delete.struts.ApplicationResources" />
</struts-config>

以下是页面内容:

<%@ page contentType="text/html;charset=GBK"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
  <title>batch_delete</title>
 </head>
 <script type="text/javascript" src="js/check.js"></script>
 <body>
  <center>
   <h2>
    Batch Delete Database Data Sample Display
   </h2>
   <hr>
   <form action="batch.do?batch=deleteSelect" name="myForm"
    method="post">
    <table style="border-collapse: collapse" border="1"
     bordercolor="#1E90FF" height="60" cellpadding="3">
     <tr style="background: #87CEFA;">
      <td>
       &nbsp;
      </td>
      <td>
       ID
      </td>
      <td>
       Name
      </td>
      <td>
       Password
      </td>
     </tr>
     <logic:iterate id="li" name="list">
      <tr>
       <td>
        <input type="checkbox" name="name" value="${li.id }">
       </td>
       <td>
        ${li.id }
       </td>
       <td>
        ${li.name }
       </td>
       <td>
        ${li.password }
       </td>
      </tr>
     </logic:iterate>
     <tr>
      <td colspan="4">
       <input type="button" value="SelectAll" onclick="checkAll()">
       &nbsp;
       <input type="submit" value="DeleteSelect">
       &nbsp;
       <input type="reset" value="ResetSelect">
      </td>
     </tr>
    </table>
   </form>
  </center>
 </body>
</html>

JSP页面引入一个js文件:

function checkAll() {
 for (var i = 0; i < myForm.name.length; i++) {
  myForm.name[i].checked=true;
 }
}

分享到:
评论

相关推荐

    通用的JSP分页+增删改查+批量删除

    NULL 博文链接:https://ware.iteye.com/blog/834527

    详细介绍 jpa 开发文档

    1. 发展中的持久化技术 1 1.1 JDBC 1 1.2关系对象映射(Object Relational Mapping,ORM) 2 1.3 Java数据对象(Java Data Object,JDO) 2 1.4 Java Persistence API(JPA) 2 ...5.11批量删除(Batch Remove) 22

    JPA开发手册Word版

    JPA的开发手册 1. 发展中的持久化技术 1 1.1 JDBC 1 1.2关系对象映射(Object Relational Mapping,ORM) 2 1.3 Java数据对象(Java Data Object,JDO) 2 1.4 Java Persistence API...5.11批量删除(Batch Remove) 22

    JPA开发手册

    JPA开发文档 1. 发展中的持久化技术 2 1.1 JDBC 2 1.2关系对象映射(Object Relational Mapping,ORM) 2 1.3 Java数据对象(Java Data Object,JDO) 2 1.4 Java Persistence API...5.11批量删除(Batch Remove) 22

    网页教程《跟姐姐学JSP》

    1.1. 开篇第一个jsp 1.2. B/S结构,请求与响应 2. 让jsp说hello 2.1. 另一个简单jsp 2.2. 中文乱码 2.2.1. 先解决响应中的乱码 2.2.2. POST乱码 2.2.3. GET乱码 3. 请求的跳转与转发 3.1. 范例 3.2. 如果用...

    hibernate 框架详解

    实现一个默认的(即无参数的)构造方法(constructor) 5.1.3. 提供一个标识属性(identifier property)(可选) 5.1.4. 使用非final的类 (可选) 5.2. 实现继承(Inheritance) 5.3. 实现equals()和hashCode...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    4.1.1. 实现一个默认的(即无参数的)构造方法(constructor) 4.1.2. 提供一个标识属性(identifier property)(可选) 4.1.3. 使用非final的类 (可选) 4.1.4. 为持久化字段声明访问器(accessors)和是否可变的...

    Hibernate+中文文档

    4.1.1. 实现一个默认的(即无参数的)构造方法(constructor) 4.1.2. 提供一个标识属性(identifier property)(可选) 4.1.3. 使用非final的类 (可选) 4.1.4. 为持久化字段声明访问器(accessors)和是否可变的...

    HibernateAPI中文版.chm

    4.1.1. 实现一个默认的(即无参数的)构造方法(constructor) 4.1.2. 提供一个标识属性(identifier property)(可选) 4.1.3. 使用非final的类 (可选) 4.1.4. 为持久化字段声明访问器(accessors)和是否可变的...

    hibernate3.04中文文档.chm

    5.1.2. 实现一个默认的(即无参数的)构造方法(constructor) 5.1.3. 提供一个标识属性(identifier property)(可选) 5.1.4. 使用非final的类 (可选) 5.2. 实现继承(Inheritance) 5.3. 实现equals()和...

    hibernate3.2中文文档(chm格式)

    4.1.1. 实现一个默认的(即无参数的)构造方法(constructor) 4.1.2. 提供一个标识属性(identifier property)(可选) 4.1.3. 使用非final的类 (可选) 4.1.4. 为持久化字段声明访问器(accessors)和是否可变的...

    Hibernate教程

    5.1.2. 实现一个默认的(即无参数的)构造方法(constructor) 5.1.3. 提供一个标识属性(identifier property)(可选) 5.1.4. 使用非final的类 (可选) 5.2. 实现继承(Inheritance) 5.3. 实现equals()和...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例014 使当前项目依赖另一个项目 21 1.3 界面设计器 22 实例015 安装界面设计器 22 实例016 设计Windows系统的运行对话框 界面 23 实例017 设计计算器程序界面 26 实例018 设计关于进销存管理系统的界面 27 第2章 ...

    Hibernate参考文档

    4.1.1. 实现一个默认的(即无参数的)构造方法(constructor) 4.1.2. 提供一个标识属性(identifier property)(可选) 4.1.3. 使用非final的类 (可选) 4.1.4. 为持久化字段声明访问器(accessors)和是否可变的...

    最全Hibernate 参考文档

    4.1.2. 实现一个默认的(即无参数的)构造方法(constructor) 4.1.3. 提供一个标识属性(identifier property)(可选) 4.1.4. 使用非final的类 (可选) 4.2. 实现继承(Inheritance) 4.3. 实现equals()和...

    Hibernate3+中文参考文档

    4.1.2. 实现一个默认的(即无参数的)构造方法(constructor) 4.1.3. 提供一个标识属性(identifier property)(可选) 4.1.4. 使用非final的类 (可选) 4.2. 实现继承(Inheritance) 4.3. 实现equals()和...

    Hibernate 中文 html 帮助文档

    4.1.1. 实现一个默认的(即无参数的)构造方法(constructor) 4.1.2. 提供一个标识属性(identifier property)(可选) 4.1.3. 使用非final的类 (可选) 4.1.4. 为持久化字段声明访问器(accessors)和是否可变的...

Global site tag (gtag.js) - Google Analytics