版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、spring调用Oracle存储过程,并用cursor返回结果集1. 创建表: Java代码 1. create table TEST_USERS 2. ( 3. USER_ID VARCHAR2(10 not null, 4. NAME VARCHAR2(10 not null,
2、; 5. PASSWORD VARCHAR2(20 not null 6. create table TEST_USERS ( USER_ID VARCHAR2(10 not null, NAME VARCHAR2(10 not null, PASSWORD VARCHAR2(20 not null 2. 创建存储过程: Java代码 1. create or replace package display
3、_users_package is 2. type search_results is ref cursor; 3. procedure display_users_proc(results_out out search_results, userId in test_users.user_id%
4、type; 4. end display_users_package; 5. 6. create or replace package body display_users_package is 7. procedure display_users_proc(results_out out search_r
5、esults, userId in test_users.user_id%type 8. is 9. begin 10.
6、160; if userId is not null then 11. open results_out for select * from test_users where user_id like userId |
7、0;'%' 12. else 13. open results_out for select * from test_users;
8、0; 14. end if; 15. end display_users_proc; 16. end display_users_package; create or replace package display_users_package is type search_
9、results is ref cursor; procedure display_users_proc(results_out out search_results, userId in test_users.user_id%type; end display_users_package; create or replace package body display_users_package is procedure display_users_proc(results_out out search_results, userId in test_users.user_id%type is
10、begin if userId is not null then open results_out for select * from test_users where user_id like userId | '%' else open results_out for select * from test_users; end if; end display_users_proc; end display_users_package;这个results_out是一个游标类型,用来返回查找的结果集。 3.完整实现代码: Java代码 9.
11、11. 13. 18. 20. 21. /* 22. * author Jane Jiao 23. * 24. */ 25. public class SpringStoredProce 26. 27.
12、;public List execute(String storedProc, String params 28. List resultList = null; 29. try 30.
13、0; final DataSource ds = DataContextUtil.getInstance(.getDataSource(; 31. final JdbcTemplate template = new JdbcTemplate(ds;
14、;32. resultList = (Listtemplate.execute(new ProcCallableStatementCreator(storedProc, params, 33.
15、60; new ProcCallableStatementCallback(; 34.
16、 catch(DataAccessException e 35. throw new RuntimeException("execute method error : DataAccessException " + e.getMessage(;
17、0;36. 37. return resultList; 38. 39. 40. 41.
18、 /* 42. * Create a callable statement in this connection. 43. */ 44. private class ProcCallableStatementCreator implements Call
19、ableStatementCreator 45. private String storedProc; 46. private String params; 47.
20、0;48. 49. /* 50. * Constructs a callable statement. 51. * param s
21、toredProc The stored procedure's name. 52. * param params
22、; Input parameters. 53. * param outResultCount count o
23、f output result set. 54. */ 55. public ProcCallableStatementCreator(String storedProc, String params 56.
24、; this.params = params; 57. this.storedProc = storedProc; 58. 59.
25、0; 60. /* 61. * Returns a callable statement 62. * param
26、60;conn Connection to use to create statement 63. * return cs A callable
27、0;statement 64. */ 65. public CallableStatement createCallableStatement(Connection conn 66.
28、160; StringBuffer storedProcName = new StringBuffer("call " 67. storedProcName.append(storedProc + "(" 68. &
29、#160; /set output parameters 69. storedProcName.append("?" 70. storedProcName
30、.append(", " 71. 72. /set input parameters 73.
31、; storedProcName.append("?" 74. storedProcName.append("" 75. 76. CallableStat
32、ement cs = null; 77. try 78. / set the first parameter is
33、;OracleTyep.CURSOR for oracel stored procedure 79. cs = conn.prepareCall(storedProcName.toString(; 80.
34、; cs.registerOutParameter (1, OracleTypes.CURSOR; 81. / set the sencond paramter 82.
35、 cs.setObject(2, params; 83. catch (SQLException e 84.
36、60; throw new RuntimeException("createCallableStatement method Error : SQLException " + e.getMessage(; 85.
37、86. return cs; 87. 88. 89. 90.
38、60; 91. /* 92. * 93. * The ProcCallableStatementCallback return a result object, 94. * for example
39、a collection of domain objects. 95. * 96. */ 97. private class ProcCallableStatementCallback implements CallableStatementCallback 98. &
40、#160; 99. /* 100. * Constructs a ProcCallableStatementCallback. 101.
41、 */ 102. public ProcCallableStatementCallback( 103. 104. 105. /* 106.
42、0; * Returns a List(Map collection. 107. * param cs
43、0; object that can create a CallableStatement given a Connection 108. * return resultsList a resu
44、lt object returned by the action, or null 109. */ 110. public Object doInCallableStatement(CallableStatement cs 111.
45、160; List resultsMap = new ArrayList(; 112. try 113.
46、 cs.execute(; 114. ResultSet rs = (ResultSet cs.getObject(1; 115.
47、; while (rs.next( 116. Map rowMap = new HashMap (; 117.
48、160; rowMap.put("userId", rs.getString("USER_ID" 118.
49、 rowMap.put("name", rs.getString("NAME" 119. rowMap.put("password", rs.getString("PASSWORD" 120.
50、0; resultsMap.add(rowMap; 121. 122.
51、 rs.close(; 123. catch(SQLException e 124. &
52、#160; throw new RuntimeException("doInCallableStatement method error : SQLException " + e.getMessage(; 125. 126.
53、 return resultsMap; 127. 128. 129. /* author Jane Jiao*/public class SpringStoredProce public List execute(String stored
54、Proc, String paramsList resultList = null;tryfinal DataSource ds = DataContextUtil.getInstance(.getDataSource(;final JdbcTemplate template = new JdbcTemplate(ds;resultList = (Listtemplate.execute(new ProcCallableStatementCreator(storedProc, params,new ProcCallableStatementCallback(;catch(DataAccessE
55、xception ethrow new RuntimeException("execute method error : DataAccessException " + e.getMessage(;return resultList;/* Create a callable statement in this connection.*/private class ProcCallableStatementCreator implements CallableStatementCreator private String storedProc;private String p
56、arams;/* Constructs a callable statement.* param storedProc The stored procedure's name.* param params Input parameters.* param outResultCount count of output result set.*/public ProcCallableStatementCreator(String storedProc, String params this.params = params;this.storedProc = storedProc;/* Re
57、turns a callable statement* param conn Connection to use to create statement* return cs A callable statement*/public CallableStatement createCallableStatement(Connection conn StringBuffer storedProcName = new StringBuffer("call "storedProcName.append(storedProc + "("/set output p
58、arametersstoredProcName.append("?"storedProcName.append(", "/set input parametersstoredProcName.append("?"storedProcName.append(""CallableStatement cs = null;try / set the first parameter is OracleTyep.CURSOR for oracel stored procedurecs = conn.prepareCall(st
59、oredProcName.toString(;cs.registerOutParameter (1, OracleTypes.CURSOR;/ set the sencond paramtercs.setObject(2, params; catch (SQLException e throw new RuntimeException("createCallableStatement method Error : SQLException " + e.getMessage(;return cs;/* * The ProcCallableStatementCallback r
60、eturn a result object, * for example a collection of domain objects.*/private class ProcCallableStatementCallback implements CallableStatementCallback /* Constructs a ProcCallableStatementCallback.*/public ProcCallableStatementCallback( /* Returns a List(Map collection.* param cs object that can cre
61、ate a CallableStatement given a Connection* return resultsList a result object returned by the action, or null*/public Object doInCallableStatement(CallableStatement csList resultsMap = new ArrayList(;try cs.execute(; ResultSet rs = (ResultSet cs.getObject(1;while (rs.next( Map rowMap = new HashMap
62、(; rowMap.put("userId", rs.getString("USER_ID"rowMap.put("name", rs.getString("NAME"rowMap.put("password", rs.getString("PASSWORD"resultsMap.add(rowMap; rs.close(;catch(SQLException e throw new RuntimeException("doInCallableStatement m
63、ethod error : SQLException " + e.getMessage(;return resultsMap;4.测试代码,在这里使用了Junit4测试: Java代码 3. 6. 10. 11. /* 12. * author Jane Jiao 13. * 14. */ 15. public clas
64、s SpringStoredProceTest 16. 17. private SpringStoredProce springStoredProce; 18. 19. /* 21. */ 22.
65、; Before 23. public void setUp( throws Exception 24. springStoredProce = new SpringStoredProce(; 25. 26
66、. 27. /* 29. */ 30. After 31. public void tearDown( throws Exception 32. springSto
67、redProce = null; 33. 34. 35. /* 37. */ 38. Test 39. public void testExecute(
68、; 40. final String storedProcName = "display_users_package.display_users_proc" 41. final String param = "test" 42.
69、; List resultList = springStoredProce.execute(storedProcName, param; 43. assertNotNull(resultList; 44. assertTrue(resultList.size( >
70、60;0; 45. for (int i = 0; i < resultList.size(; i+ 46. Map rowMap = resultList.get(i; 47.
71、160; final String userId = rowMap.get("userId".toString(; 48. final String name = rowMap.get("name".toString(;
72、0; 49. final String password = rowMap.get("password".toString(; 51. 52. 53. &
73、#160; 54. /* * author Jane Jiao * */ public class SpringStoredProceTest private SpringStoredProce springStoredProce; /* */ Before public void setUp( throws Exception springStoredProce = new SpringStoredProce(; /* */ After public void tearDown( throws Exception spr
74、ingStoredProce = null; /* */ Test public void testExecute( final String storedProcName = "display_users_package.display_users_proc" final String param = "test" List resultList = springStoredProce.execute(storedProcName, param; assertNotNull(resultList; assertTrue(resultList.size(
75、 > 0; for (int i = 0; i < resultList.size(; i+ Map rowMap = resultList.get(i; final String userId = rowMap.get("userId".toString(; final String name = rowMap.get("name".toString(; final String password = rowMap.get("password".toString(; 5. 测试的输出结果: Java代码 1.
76、 USER_ID=test1 name=aa password=aa 2. USER_ID=test2 name=bb password=bb 3. USER_ID=test3 name=cc password=cc USER_I
77、D=test1 name=aa password=aa USER_ID=test2 name=bb password=bb USER_ID=test3 name=cc password=cc声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载写存储过程:一:无返回值的存储过程存储过程为:CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2 ASBEGIN INSERT INTO HYQ.B_ID (I_ID,I_NAME VALUES (PARA1, PARA2;END TESTA;然后呢,
78、在java里调用时就用下面的代码:public class TestProcedureOne public TestProcedureOne( public static void main(String args Statement stmt = null;ResultSet rs = null;Connection conn = null;CallableStatement cstmt = null;try Class.forName(driver;conn = DriverManager.getConnection(strUrl, " hyq ", " hy
79、q "CallableStatement proc = null;proc = conn.prepareCall(" call HYQ.TESTA(?,? "proc.setString(1, "100"proc.setString(2, "TestOne"proc.execute(;catch (SQLException ex2 ex2.printStackTrace(;catch (Exception ex2 ex2.printStackTrace(;finallytry if(rs != nullrs.close(;i
80、f(stmt!=nullstmt.close(;if(conn!=nullconn.close(;catch (SQLException ex1 当然了,这就先要求要建张表TESTTB,里面两个字段(I_ID,I_NAME)。二:有返回值的存储过程(非列表)存储过程为:CREATE OR REPLACE PROCEDURE TESTB(PARA1 IN VARCHAR2,PARA2 OUT VARCHAR2 ASBEGIN SELECT INTO PARA2 FROM TESTTB WHERE I_ID= PARA1; END TESTB;在java里调用时就用下面的代码:public cla
81、ss TestProcedureTWO public TestProcedureTWO( public static void main(String args Statement stmt = null;ResultSet rs = null;Connection conn = null;try Class.forName(driver;conn = DriverManager.getConnection(strUrl, " hyq ", " hyq "CallableStatement proc = null;proc = conn.prepareC
82、all(" call HYQ.TESTB(?,? "proc.setString(1, "100"proc.registerOutParameter(2, Types.VARCHAR;proc.execute(;String testPrint = proc.getString(2;catch (SQLException ex2 ex2.printStackTrace(;catch (Exception ex2 ex2.printStackTrace(;finallytry if(rs != nullrs.close(;if(stmt!=null16.4
83、 承包人代表授权人选任命和撤回除合同约定或依法应由承包人代表履行的职权外,承包人代表可将其职权以书面形式授予其临时任命的一名合适人选,亦可将其授权撤回。任何此类任命和撤回均应提前7天以书面形式通知发包人和监理工程师,并征得发包人同意。未将有关文件送交发包人和监理工程师之前,任何此类任命和撤回均为无效。17 C+发包人代表17.1 发包人对其代表授权发包人应在专用条款中写明发包人代表具体人选,同时在开工前以书面形式任命发包人代表并将有关文件送交承包人,授予其代表发包人履行合同约定职责所需的一切权力。除专用条款另有约定或经承包人同意外,发包人不应对发包人代表的权力另有限制。17.2 发包人代表职权
84、发包人代表应代表发包人履行合同约定的职责、行使合同明文规定或必然隐含的权力,对发包人负责。发包人代表在发包人授予职权范围内的工作,发包人应予认可。18 监理工程师18.1 发包人对监理工程师授权发包人应在专用条款中约定负责本工程的监理单位和监理工程师具体人选,同时在开工前以书面形式任命监理工程师并将有关文件送交承包人,授予其代表发包人履行合同约定职责所需的权力。发包人在合同签订后7天内将监理工程师的职权范围以书面形式送交承包人。18.2 监理工程师职权监理工程师行使发包人授予的职权,可代表发包人负责监督和检查工程的投资、质量、进度、安全等,及时向承包人提供供工作所需的指令。监理工程师无权免除合
85、同任何一方在合同履行期间应尽的任何责任和义务。18.3 监理工程师指令监理工程师应按合同约定时间及时向承包人提供工作所需的指令、批准和通知等。监理工程师提供的指令、批准和通知等,均应采用书面形式。如有必要,监理工程师也可发出口头指令,但应在48小时内给予书面确认。对监理工程师的口头指令,承包人应予执行。如果承包人在监理工程师发出的口头指令48小时后未收到书面确认,则应在接到口头指令后7天内提出书面确认要求。监理工程师应在承包人提出书面确认要求后48小时内给予答复,逾期不予答复的,视为承包人的书面要求已被确认。18.4 承包人执行监理工程师指令如果承包人认为监理工程师的指令不合理,应在收到指令后
86、24小时内向监理工程师提出书面报告,监理工程师应在收到承包人报告后24小时内做出修改指令或继续执行原指令的决定,并书面通知承包人。逾期不作出决定的,承包人可不执行监理工程师的指令。18.5 监理工程师职权委托监理工程师可按规定授权给其任命的监理工程师代表,亦可将其授权撤回。监理工程师代表行使监理工程师授予的职权,对监理工程师负责。监理工程师代表在监理工程师授予职权范围内的工作,监理工程师应予认可。18.6 监理工程师未尽义务或失误的责任监理工程师(含监理工程师代表)未尽义务或失误,导致拖延了工期和(或)增加了费用,其增加的费用由发包人承担,工期相应顺延;给承包人造成损失的,发包人应予赔偿。19
87、 造价工程师19.1 发包人对造价工程师授权发包人应在专用条款中约定负责本工程的造价咨询单位和造价工程师具体人选,同时在开工前以书面形式任命造价工程师并将有关文件送交承包人,授予其代表发包人履行合同约定职责所需的权力。发包人授予造价工程师的职权范围在合同签订后7天内以书面形式送交承包人。19.2 造价工程师职权造价工程师行使发包人授予的职权,可代表发包人负责本工程的计量和计价、工程价款的调整和核实、结算价款的编制、调整和复核、签发支付证书,及时向承包人提供合同价款的审核、调整和通知等指令。造价工程师无权免除合同任何一方在合同履行期间应尽的任何责任和义务。19.3 造价工程师指令造价工程师应按合
88、同约定时间及时向承包人提供合同价款的审核、调整和通知等指令。造价工程师提供的指令,均应采用书面形式。如有必要,造价工程师也可发出口头指令,但应在48小时内给予书面确认。对造价工程师的口头指令,承包人应予执行。如果承包人在造价工程师发出的口头指令48小时后未收到书面确认,则应在接到口头指令后7天内提出书面确认要求。造价工程师应在承包人提出书面确认要求后48小时内给予答复,逾期不予答复的,视为承包人的书面要求已被确认。19.4 承包人执行造价工程师指令如果承包人认为造价工程师的指令不合理,应在收到指令后24小时内向造价工程师提出书面报告,造价工程师应在收到承包人报告后24小时内做出修改指令或继续执
89、行原指令的决定,并书面通知承包人。逾期不作出决定的,承包人可不执行造价工程师的指令。19.5 造价工程师未尽义务或失误的责任造价工程师未尽义务或失误,导致拖延了工期和(或)增加了费用,其增加的费用由发包人承担,工期相应顺延;给承包人造成损失的,发包人应予赔偿。20 承包人代表20.1 承包人对其代表授权承包人应依据规定在专用条款中约定承包人代表具体人选,同时在开工前以书面形式任命承包人代表并将有关文件送交发包人,授予其代表承包人履行合同约定职责所需的全部权力。20.2 承包人代表职权承包人代表应代表承包人履行合同约定的职责、行使合同明文规定或必然隐含的权力,对承包人负责。承包人代表在承包人授予
90、职权范围内的工作,承包人应予认可。20.3 承包人代表临时任命人职权如果承包人代表在合同履行期间确需暂离现场,则应在监理工程师同意下,可按规定授权给其临时任命的一名合适人选,亦可将其授权撤回。临时任命人行使承包人代表授予的职权,对承包人代表负责。临时任命人在承包人代表授予职权范围内的工作,承包人代表应予认可。未按承包人代表授权人选任命和撤回的规定,任何此类任命和撤回均为无效。20.4 紧急情况时承包人代表采取措施及双方责任承包人代表按经发包人认可的施工组织设计和监理工程师发出的指令组织施工。在紧急情况且无法与监理工程师取得联系时,承包人代表应立即采取保证人员生命和工程、财产安全的有效措施,并在
91、采取措施后48在我所做过和参与的大多数项目中,都会有用户提出的复杂的一些统计报表之内的功能要求,根据统计的复杂程度、效率及JAVA程序调用的方便性方面考虑,主要总结出以下几种方案:21 分包人和另行发包21.1 分包人工作分包人是指从事下列工作之一的分包人:(1)根据合同条款的约定,承包人依法确定的实施、完成任何永久工程的分包人;(2)承包人选定的提供本工程材料设备、服务的分包人。21.2 发包人对分包人的接受发包人不能指定分包人,但发包人有权拒绝其有理由反对的分包人。21.3 另行发包1、SQL语句另行发包是指发包人依法对整体工程中部分特殊工程或本合同约定由发包人提供的工程材料设备、服务进行
92、发包。21.4 承包人对另行发包的接受另行发包是发包人在本合同范围之外的承发包行为,发包人不应要求承包人接受另行发包的责任和义务。承包人对另行发包工程的实施应积极配合。22 承包人雇员22.1 承包人的雇员承包人可聘用本工程实施过程中的主要施工人员,也可以聘用经监理工程师批准的其他人员,但不得从发包人或为发包人服务的人员中招聘雇员。22.2 承包人对雇员应做的工作承包人应完善聘用员工劳务注册手续,并与其订立劳务合同,明确双方的权利和义务。聘用期间,承包人应做好下列工作:(1)负责为雇员提供和保持必要的食宿及各种生活设施,采取合理的卫生和安全防护措施,保护雇员的健康和安全;该方案只能实现一些相对
93、简单些的查询统计功能,语句嵌套多、写起来特别复杂,使程序的可读性变差,下面是实现一个按照上级机关统计下级各个公安机关管辖范围内对应的各个类别社会单位数量的统计功能的SQL:代码 (4)雇员和进入施工现场施工、管理的全部人员应佩戴工作证上岗。22.3 承包人特殊时间施工的批准承包人如需在法定节假日施工,应经监理工程师批准;如需在夜间施工,除应经监理工程师批准外,还应经有关部门批准。如无特殊原因,只要不影响工程质量、施工安全、周围环境,监理工程师应予同意。但为抢救生命或保护财产,或为工程安全、质量而不可避免的作业,则不必事先经监理工程师的批准。22.4 承包人向雇员支付劳务工资select
94、0;rpad(gajg_dm,12,22.5 承包人雇员的要求和撤换承包人雇员应是在行业或职业内具有相应资格、技能和经验的人员。对有下列行为的任何承包人雇员,监理工程师可要求承包人撤换:(1)无能力履行义务或玩忽职守;'0', )不遵守合同的约定; 2. sum(4)经常行为不当;22.6 承包人对雇员的保护承包人应自始至终采取各种合理的预防措施,防止雇员内部发生任何无序、非法和斗殴等不良行为,以确保现场安定和保护现场及邻近人员的生命、财产安全。22.7 承包人提供雇员统计表如果监理工程师提出要求,承包人应按要求向监理
95、工程师提交一份详细的统计表,该表内容包括承包人在施工场地的各类职员和各个工种、各等级的雇员人数等。as C01, 3. 23 工程担保23.1 承包人提供履约担保为正确履行本合同,发包人应在招标文件中或在签订合同前明确履约担保的有关要求,承包人应在签订本合同时按要求向发包人提供履约担保,承包人向发包人提供履约担保应在专用条款约定。履约担保采用银行保函、专业担保公司保证、保险公司保函的形式等(参考格式见附件)。23.2 as C02, 履约担保的有效期,是从提供履约担保之日起至本工程竣工验收合格之日止。承包人可在担保有效期满后,凭工程竣工验收证明文件以及担保保管单位的收讫证明,将此担保原件取回。4. sum(decode(C03, 0, 0, C03 发包人在对履约担保提出索赔要求之前,应书面通知承包人,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 演艺灯光光束角度编程师岗位招聘考试试卷及答案
- 眼部按摩仪穴位调试技师岗位招聘考试试卷及答案
- 压铸模试模调试技师考试试卷及答案
- 2025年江西省瑞昌市高二生物下册期末考试模拟卷附完整答案【夺冠系列】
- 2026年云南省大理市高二生物下册期末考试考试卷及参考答案【综合题】
- 2025年湖北省赤壁市高二生物下册期末考试测试卷(考试直接用)附答案
- 2026年辽宁省大石桥市高二生物下册期末考试测试卷(夺分金卷)附答案
- 2026年浙江省余姚市高二生物下册期末考试模拟卷及参考答案【达标题】
- 2026年广东省兴宁市高二生物下册期末考试试卷【全优】附答案
- 2026年辽宁省东港市高二生物下册期末考试模拟卷【夺分金卷】附答案
- 2026高速轮轨材料耐磨损性能改进技术研究及铁路设备寿命评估模型
- 2026年大学辅导员招聘面试高频题
- 2026年高考云南卷物理高考真题
- 蓄力高三赶考期末课件-高二下学期期末考试动员主题班会
- 镇静镇痛患者的健康教育
- 2024人教版(五线谱)一年级音乐下册 第一单元《爱的摇篮》教案
- 人民日报招聘笔试题库2026
- 鲁科版二年级劳动实践指导手册全册教案
- 金税四期下的税务风险与防范
- 大吴泥塑赏析吴汉松
- 中药化学重点笔记14014
评论
0/150
提交评论