package org.fireflow.service.jdbc.delete; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import javax.sql.DataSource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.fireflow.engine.exception.ServiceInvocationException; import org.fireflow.service.jdbc.query.DBQueryServiceDef; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class DBDeleteImpl implements DBDelete { private static final Log log = LogFactory.getLog(DBDeleteImpl.class); DBDeleteServiceDef service = null; public void doDelete(Document where) throws ServiceInvocationException { log.debug("The sql is '"+service.getSQL()+"'"); //获得根节点 Element whereElement = (Element)where.getDocumentElement(); //获得所有where 条件节点 List<Element> whereFieldsElement = new ArrayList<Element>();; NodeList whereNodeList = whereElement.getChildNodes(); for (int i=0;i<whereNodeList.getLength();i++){ Node childNode = whereNodeList.item(i); if (childNode.getNodeType()==Node.ELEMENT_NODE){ whereFieldsElement.add((Element)childNode); } } Connection con = null; PreparedStatement pstmt = null; try{ DataSource ds = service.getDataSource(); con = ds.getConnection(); pstmt = con.prepareStatement(service.getSQL()); DBDeleteServiceDef.fulfillPreparedStatement(pstmt,whereFieldsElement,1); pstmt.execute(); }catch(SQLException e){ throw new ServiceInvocationException(e); }catch(Exception e){ throw new ServiceInvocationException(e); } finally{ try{ if (pstmt!=null){ pstmt.close(); } if (con!=null){ con.close(); } }catch(SQLException ex){ } } } public void setDBDeleteService(DBDeleteServiceDef svc){ this.service = svc; } public DBDeleteServiceDef getDBDeleteService(){ return this.service; } }