测试spring的存储过程spring对存储过程进行封装.它的实现细节与jdbc类似 下面进行测试 1):写存储过程执行类: package jdbc; import java.sql.Types; import java.util.HashMap; import java.util.Map; import javax.sql.DataSource; import org.springframework.jdbc.core.SqlParameter; import org.springframework.jdbc.object.StoredProcedure; import org.springframework.jdbc.core.SqlOutParameter; import org.springframework.jdbc.core.SqlParameter; public class StoreTemplate     extends StoredProcedure {     HashMap map = new HashMap();       public StoreTemplate() {  super();     }     public void setValue(String key, Object obj) {  map.put(key, obj);     }     public StoreTemplate(DataSource ds) {  setDataSource(ds);     }        public Map execute() {         if(this.getSql()==null || this.getSql().equals("")) return null;  this.compile();  return execute(map);     }     public void setVarcharParam(String param) {  this.declareParameter(new SqlParameter(param, Types.VARCHAR));     }        public void setDoubleParam(String param) {  this.declareParameter(new SqlParameter(param, Types.DOUBLE));     }        public void setIntegerParam(String param) {  this.declareParameter(new SqlParameter(param, Types.INTEGER));     }        public void setVarcharOutParam(String param) {  this.declareParameter(new SqlOutParameter(param, Types.VARCHAR));     }        public void setDoubleOutParam(String param) {  this.declareParameter(new SqlOutParameter(param, Types.DOUBLE));     }     public void setIntegerOutParam(String param) {  this.declareParameter(new SqlOutParameter(param, Types.INTEGER));     } } 2):用spring配置数据源: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans>        <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">   <property name="driverClassName"><value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value></property>   <property name="url"><value>jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=pubs;SelectMethod=Cursor</value></property>   <property name="username"><value>sa</value></property>   <property name="password"><value></value></property>  </bean> </beans> 3):写junit: package jdbc; import junit.framework.*; import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; import java.util.List; import java.util.Map; import javax.sql.DataSource; public class TestStoreTemplate extends TestCase {  ApplicationContext ctx=null;  protected void setUp() throws Exception {       ctx= new FileSystemXmlApplicationContext("D:\\work\\jpetstore\\src\\jdbc\\Context-jdbc.xml");  }  public void testStore(){      DataSource datasource=(DataSource)ctx.getBean("dataSource");       StoreTemplate qry=new StoreTemplate(datasource);      qry.setSql("testsp");      qry.setIntegerParam("count");       qry.setIntegerOutParam("ret");      qry.setValue("count",new Integer(1));      Map map=qry.execute();      if(map!=null){   System.out.println(map.get("ret"));      }  }       protected void tearDown() throws Exception {  } } 4):写测试存储过程 SET QUOTED_IDENTIFIER ON  GO SET ANSI_NULLS ON  GO create  procedure testsp(@count  int,@ret int out) as begin  select @ret=@count+1 end GO SET QUOTED_IDENTIFIER OFF  GO SET ANSI_NULLS ON  GO 5):编译运行 ok. 6):附jdbc调用存储过程的方法 package jdbc; import junit.framework.*; import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; import javax.sql.DataSource; import java.sql.*; public class TestJdbcCallStore     extends TestCase {     ApplicationContext ctx = null;     protected void setUp() throws Exception {  ctx = new FileSystemXmlApplicationContext("D:\\work\\jpetstore\\src\\jdbc\\Context-jdbc.xml");     }     public void testStore() {  DataSource datasource = (DataSource) ctx.getBean("dataSource");  CallableStatement cstmt = null;  try {      cstmt = datasource.getConnection().prepareCall(   "{call testsp(?,?)}");      cstmt.setInt(1, 1);      cstmt.registerOutParameter(2, Types.INTEGER);      cstmt.executeUpdate();      Object obj = cstmt.getObject(2);      if (obj != null) {   System.out.println(obj.toString());      }  }  catch (SQLException es) {      es.printStackTrace(System.out);  }  finally {  }     }     protected void tearDown() throws Exception {     } }  //为了简单,有些代码省去了,象transaction.
 [email protected]  
 
  |