SQL Server学习:Java调用SQL Server存储过程(Spring方式)
来源:互联网 发布:软件需求文档ppt 编辑:程序博客网 时间:2024/06/10 13:41
Java代码 —— 测试类代码:
public class SpringInvokeSP {public static void main(String[] args) {String driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver";String url="jdbc:sqlserver://192.168.0.3:1433;DatabaseName=CTU_WMS";String username="CTU_WMS_user";String password="ctuwms";// 创建datasourceDriverManagerDataSource ds = new DriverManagerDataSource();ds.setDriverClassName(driverClassName);ds.setUrl(url);ds.setUsername(username);ds.setPassword(password);resultSP(ds);}/** * 返回多个结果集的存储过程 * @param ds */public static void resultSP(DriverManagerDataSource ds){SQLStoredProcedure sp = new SQLStoredProcedure(ds,"my_sp_test");sp.addParameter("i", 11);sp.addOutStringParameter("outstr");sp.addInOutParameter("returnCode", "Hello vicky");sp.addOutDateParameter("date");sp.addOutDateParameter("datetime");sp.addResultSetParameter("result-set-1", CdBillNoRuleModel.class);sp.addResultSetParameter("result-set-2", EsUserModel.class);Map<String,Object> result = sp.execute();String resultStr = (String)result.get("outstr");String returnCode = (String)result.get("returnCode");System.out.println(resultStr);System.out.println(returnCode);System.out.println((Date)result.get("date"));System.out.println((Date)result.get("datetime"));List<CdBillNoRuleModel> results = (List<CdBillNoRuleModel>) result.get("result-set-1");if(null != results){try {for(CdBillNoRuleModel model : results){System.out.println(model.getCdbrDesc());}} catch (Exception e) {e.printStackTrace();}}List<EsUserModel> users = (List<EsUserModel>)result.get("result-set-2");//if(users != null){for(EsUserModel user:users){System.out.println(user.getEsusLoginName());}}}}
Java代码 —— 工具类代码:
public class SQLStoredProcedure extends StoredProcedure {private Map<String, Object> parameters = new HashMap<String, Object>();public SQLStoredProcedure(DataSource ds,String spName){super(ds,spName);}public void addParameter(String name, String value) {super.declareParameter(new SqlParameter(name, Types.VARCHAR));parameters.put(name, value);}public void addParameter(String name, int value) {super.declareParameter(new SqlParameter(name, Types.INTEGER));parameters.put(name, value);}public void addParameter(String name, double value) {super.declareParameter(new SqlParameter(name, Types.DOUBLE));parameters.put(name, value);}public void addParameter(String name, Date value) {super.declareParameter(new SqlParameter(name, Types.TIMESTAMP));parameters.put(name, value);}public void addInOutParameter(String name, String value) {super.declareParameter(new SqlInOutParameter(name, Types.VARCHAR));parameters.put(name, value);}public void addInOutParameter(String name, int value) {super.declareParameter(new SqlInOutParameter(name, Types.INTEGER));parameters.put(name, value);}public void addInOutParameter(String name, double value) {super.declareParameter(new SqlInOutParameter(name, Types.DOUBLE));parameters.put(name, value);}public void addInOutParameter(String name, Date value) {super.declareParameter(new SqlInOutParameter(name, Types.TIMESTAMP));parameters.put(name, value);}public void addOutStringParameter(String name) {super.declareParameter(new SqlOutParameter(name, Types.VARCHAR));}public void addOutIntParameter(String name) {super.declareParameter(new SqlOutParameter(name, Types.INTEGER));}public void addOutDoubleParameter(String name) {super.declareParameter(new SqlOutParameter(name, Types.DOUBLE));}public void addOutDateParameter(String name) {super.declareParameter(new SqlOutParameter(name, Types.TIMESTAMP));}public void addResultSetParameter(String name,Class<?> entityTypeClass){super.declareParameter(new SqlReturnResultSet(name,ParameterizedBeanPropertyRowMapper.newInstance(entityTypeClass)));}public Map<String, Object> execute() {return super.execute(parameters);}@Overridepublic Map<String, Object> execute(Map inParams) throws DataAccessException {Map allParams = new HashMap();allParams.putAll(parameters);allParams.putAll(inParams);return super.execute(allParams);}@Overridepublic Map<String, Object> execute(final ParameterMapper inParamMapper)throws DataAccessException {return super.execute(new ParameterMapper() {public Map createMap(Connection con) throws SQLException {Map allParams = new HashMap();allParams.putAll(parameters);allParams.putAll(inParamMapper.createMap(con));return allParams;}});}}
SQL存储过程代码:
IF EXISTS (SELECT * FROM SYSOBJECTS WHERE name='my_sp_test' AND TYPE='P') BEGINDROP PROCEDURE my_sp_test;END;GOcreate procedure my_sp_test @i int, @outstr varchar(100) out,@returnCode varchar(100) out asbegin try begin trandeclare @j int;set @returnCode = @returnCode +';OUT PUT 参数测试';if @i<10 begin set @outstr = 'system exception.'; set @j = 10/0;endelse begin begin try if @i>=20 beginset @outstr = 'customer exception 2222222222222222';set @j = 10/0; end else beginset @j = @i; set @outstr = 'customer exception 11111111111111111'; select * from CD_BILL_NO_RULE where CREATOR = '150' AND REC_VER =0; select * from ES_USER where ESUS_ESCO_ID = 100;RAISERROR (66666, -- Message id. 16, -- Severity, 1 -- State, ) ;end; end try begin catch raiserror(66666,16,1); set @outstr = 'customer exception 333333333333333333'; end catch; end;commit tran;end trybegin catchif @@ERROR=66666 begin set @outstr = @outstr + '---------------- customer exception';end;rollback tran;return;end catch;go
使用Spring调用SQLServer存储过程与Oracle存储过程的差别:
1、调用一个返回结果集的存储过程
SQL Server:
super.declareParameter(new SqlReturnResultSet(name,ParameterizedBeanPropertyRowMapper.newInstance(entityTypeClass)));
Oracle:
super.declareParameter(new SqlOutParameter(name,OracleTypes.CURSOR,ParameterizedBeanPropertyRowMapper.newInstance(entityTypeClass));
注:(1). SQL Server定义返回结果集的存储过程,只需在存储过程中执行一个查询语句即可。但是这个查询语句必 须在transaction中。
(2). SQL Server存储过程返回的结果集因为没有定义具体的变量名,所以我们在获取结果集的时候,直接写 “default”即可。
sp.addResultSetParameter("default", CdBillNoRuleModel.class);
Map<String,Object> result = sp.execute();
List<CdBillNoRuleModel> results = (List<CdBillNoRuleModel>)result.get("default");
(3). 如果存储过程中有返回多个结果集,则不能直接用“default”来获取结果集,而是用“result-set-*”。
sp.addResultSetParameter("result-set-1", CdBillNoRuleModel.class);
sp.addResultSetParameter("result-set-2", EsUserModel.class);
Map<String,Object> result = sp.execute();
List<CdBillNoRuleModel> results = (List<CdBillNoRuleModel>)result.get("result-set-1");
List<EsUserModel> users = (List<EsUserModel>)result.get("result-set-2");
相关资源下载地址: http://download.csdn.net/detail/chen_yu_ting/4233615
- SQL Server学习:Java调用SQL Server存储过程(Spring方式)
- SQL Server学习:Java调用SQL Server存储过程(JDBC方式)
- Java调用SQL Server存储过程
- Java调用SQL Server存储过程
- java调用SQL Server存储过程详解
- java调用SQL server存储过程
- Sql Server 调用存储过程
- java调用sql server的存储过程(dbutils)
- SQL Server存储过程学习
- sql server 存储过程学习
- 学习SQL Server存储过程(转载)
- 存储过程学习(sql server)
- Java/JSP中调用SQL Server存储过程完整示例
- Java/JSP中调用SQL Server存储过程完整示例
- Java/JSP中调用SQL Server存储过程完整示例
- Java/JSP中调用SQL Server存储过程完整示例
- Java/JSP中调用SQL Server存储过程完整示例
- Java/JSP中调用SQL Server存储过程完整示例
- 第九章实验报告(5)
- JasperReport中使用多个数据源的方法
- 动态库调用静态库
- 防止刷票方法大全
- xmlHttpRequest 用法。
- SQL Server学习:Java调用SQL Server存储过程(Spring方式)
- webview 表单输入问题
- Hibernate拦截器(Interceptor)【转】
- CentOS5.5 默认基本服务详解
- VB实验报告
- VC6.0中如何修改工程的名字
- js 函数一览表
- SIP协议及与Freeswitch的关系
- 解决Ubuntu环境变量错误导致无法正常登录