- 浏览: 827149 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (530)
- Java编程 (64)
- C/C++/D (6)
- .Net/C# (9)
- Ruby (12)
- JavaScript (77)
- XML (1)
- JSON (1)
- Ajax (17)
- ExtJs (81)
- YUI (1)
- JQuery (7)
- DWR (1)
- HTML (7)
- CSS (7)
- Database (6)
- PowerDesigner (23)
- DB2 (2)
- Oracle (57)
- MS SQL Server (8)
- MySQL (6)
- JSP/Servlet/JSTL/TagLib (3)
- Spring (1)
- Hibernate (0)
- iText (0)
- Struts (0)
- Struts2 (0)
- iReport (0)
- FreeMarker (0)
- HttpClient (1)
- POI (6)
- FckEditor (15)
- Eclipse / MyEclipse (10)
- IntelliJ IDEA (0)
- NetBeans (0)
- Tomcat (11)
- WebLogic (1)
- Jboss (3)
- jetty (4)
- IIS (2)
- CVS/VSS (1)
- FTP (1)
- Windows/DOS (6)
- Linux/Unix (0)
- 软件建模 UML (0)
- Design Pattern & Thinking In Programming (10)
- 数据结构与算法 (12)
- 软件项目管理 (9)
- 行业应用解决方案 (3)
- 电脑软件与故障解决 (13)
- 编程语言 (1)
- 十万个为什么 (3)
- JBPM (2)
- sysbase (2)
- JDBC (8)
- Ant (2)
- Case-计算机辅助软件工程 (1)
- WebService (4)
- 浏览器 (1)
最新评论
-
gaoqiangjava:
同一楼,还请大手帮解决
JAVA读取word文件 -
hyl523:
// 判断数组中的第一个值是否未定义,如果未定义,便定义为空对 ...
javascript面向对象之二 命名空间 -
ping12132200:
ping12132200 写道我抱着个错不是因为:body标签 ...
extjs在IE报对象不支持此属性或方法 -
ping12132200:
我抱着个错不是因为:body标签内的第一个元素不能为文本tex ...
extjs在IE报对象不支持此属性或方法 -
fireinjava:
呀,不错,转走了,谢谢啦~
利用OpenOffice将word转换成PDF
这是总结以前使用spring调用Oracle存储过程,并用cursor返回结果集的一个完整实例,希望能对大家有帮助。
1. 创建表:
- create table TEST_USERS
- (
- USER_ID VARCHAR2(10) not null,
- NAME VARCHAR2(10) not null,
- PASSWORD VARCHAR2(20) not null
- )
create table TEST_USERS ( USER_ID VARCHAR2(10) not null, NAME VARCHAR2(10) not null, PASSWORD VARCHAR2(20) not null )
2. 创建存储过程:
- create or replace package display_users_package is
- type search_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
- 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;
create or replace package display_users_package is type search_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 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. 完整实现代码:
- import java.sql.CallableStatement;
- import java.sql.Connection;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import javax.sql.DataSource;
- import oracle.jdbc.OracleTypes;
- import org.springframework.dao.DataAccessException;
- import org.springframework.jdbc.core.CallableStatementCallback;
- import org.springframework.jdbc.core.CallableStatementCreator;
- import org.springframework.jdbc.core.JdbcTemplate;
- import com.spring.stored.procedure.util.DataContextUtil;
- /**
- * @author Jane Jiao
- *
- */
- public class SpringStoredProce {
- public List<Map> execute(String storedProc, String params){
- List<Map> resultList = null;
- try{
- final DataSource ds = DataContextUtil.getInstance().getDataSource();
- final JdbcTemplate template = new JdbcTemplate(ds);
- resultList = (List<Map>)template.execute(new ProcCallableStatementCreator(storedProc, params),
- new ProcCallableStatementCallback());
- }catch(DataAccessException e){
- throw 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 params;
- /**
- * 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;
- }
- /**
- * Returns 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 parameters
- storedProcName.append("?");
- storedProcName.append(", ");
- //set input parameters
- storedProcName.append("?");
- storedProcName.append(")");
- CallableStatement cs = null;
- try {
- // set the first parameter is OracleTyep.CURSOR for oracel stored procedure
- cs = conn.prepareCall(storedProcName.toString());
- cs.registerOutParameter (1, OracleTypes.CURSOR);
- // set the sencond paramter
- cs.setObject(2, params);
- } catch (SQLException e) {
- throw new RuntimeException("createCallableStatement method Error : SQLException " + e.getMessage());
- }
- return cs;
- }
- }
- /**
- *
- * The ProcCallableStatementCallback return 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 create a CallableStatement given a Connection
- * @return resultsList a result object returned by the action, or null
- */
- public Object doInCallableStatement(CallableStatement cs){
- List<Map> resultsMap = new ArrayList<Map>();
- try {
- cs.execute();
- ResultSet rs = (ResultSet) cs.getObject(1);
- while (rs.next()) {
- Map<String, String> rowMap = new HashMap<String, String>();
- 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 method error : SQLException " + e.getMessage());
- }
- return resultsMap;
- }
- }
- }
import java.sql.CallableStatement; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.sql.DataSource; import oracle.jdbc.OracleTypes; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.CallableStatementCallback; import org.springframework.jdbc.core.CallableStatementCreator; import org.springframework.jdbc.core.JdbcTemplate; import com.spring.stored.procedure.util.DataContextUtil; /** * @author Jane Jiao * */ public class SpringStoredProce { public List<Map> execute(String storedProc, String params){ List<Map> resultList = null; try{ final DataSource ds = DataContextUtil.getInstance().getDataSource(); final JdbcTemplate template = new JdbcTemplate(ds); resultList = (List<Map>)template.execute(new ProcCallableStatementCreator(storedProc, params), new ProcCallableStatementCallback()); }catch(DataAccessException e){ throw 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 params; /** * 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; } /** * Returns 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 parameters storedProcName.append("?"); storedProcName.append(", "); //set input parameters storedProcName.append("?"); storedProcName.append(")"); CallableStatement cs = null; try { // set the first parameter is OracleTyep.CURSOR for oracel stored procedure cs = conn.prepareCall(storedProcName.toString()); cs.registerOutParameter (1, OracleTypes.CURSOR); // set the sencond paramter cs.setObject(2, params); } catch (SQLException e) { throw new RuntimeException("createCallableStatement method Error : SQLException " + e.getMessage()); } return cs; } } /** * * The ProcCallableStatementCallback return 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 create a CallableStatement given a Connection * @return resultsList a result object returned by the action, or null */ public Object doInCallableStatement(CallableStatement cs){ List<Map> resultsMap = new ArrayList<Map>(); try { cs.execute(); ResultSet rs = (ResultSet) cs.getObject(1); while (rs.next()) { Map<String, String> rowMap = new HashMap<String, String>(); 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 method error : SQLException " + e.getMessage()); } return resultsMap; } } }
4. 测试代码,在这里使用了Junit4测试:
- import static org.junit.Assert.assertNotNull;
- import static org.junit.Assert.assertTrue;
- import java.util.List;
- import java.util.Map;
- import org.junit.After;
- import org.junit.Before;
- import org.junit.Test;
- /**
- * @author Jane Jiao
- *
- */
- public class SpringStoredProceTest {
- private SpringStoredProce springStoredProce;
- /**
- * @throws java.lang.Exception
- */
- @Before
- public void setUp() throws Exception {
- springStoredProce = new SpringStoredProce();
- }
- /**
- * @throws java.lang.Exception
- */
- @After
- public void tearDown() throws Exception {
- springStoredProce = null;
- }
- /**
- * Test method for {@link com.hactl.listingframework.dao.SpringStoredProce#execute(java.lang.String, java.lang.String)}.
- */
- @Test
- public void testExecute() {
- final String storedProcName = "display_users_package.display_users_proc";
- final String param = "test";
- List<Map> resultList = springStoredProce.execute(storedProcName, param);
- assertNotNull(resultList);
- assertTrue(resultList.size() > 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();
- System.out.println("USER_ID=" + userId + "\t name=" + name + "\t password=" + password);
- }
- }
- }
import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.util.List; import java.util.Map; import org.junit.After; import org.junit.Before; import org.junit.Test; /** * @author Jane Jiao * */ public class SpringStoredProceTest { private SpringStoredProce springStoredProce; /** * @throws java.lang.Exception */ @Before public void setUp() throws Exception { springStoredProce = new SpringStoredProce(); } /** * @throws java.lang.Exception */ @After public void tearDown() throws Exception { springStoredProce = null; } /** * Test method for {@link com.hactl.listingframework.dao.SpringStoredProce#execute(java.lang.String, java.lang.String)}. */ @Test public void testExecute() { final String storedProcName = "display_users_package.display_users_proc"; final String param = "test"; List<Map> resultList = springStoredProce.execute(storedProcName, param); assertNotNull(resultList); assertTrue(resultList.size() > 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(); System.out.println("USER_ID=" + userId + "\t name=" + name + "\t password=" + password); } } }
5. 测试的输出结果:
- USER_ID=test1 name=aa password=aa
- USER_ID=test2 name=bb password=bb
- USER_ID=test3 name=cc password=cc
发表评论
-
JAVA调用ORACLE存储过程小结
2010-07-01 00:20 1095JAVA调用ORACLE存储过程小结 一、无返回值的存储过程 ... -
jdbc 如何调用oracle的存储过程
2010-06-30 23:59 934摘要: create or replace procedur ... -
JDBC数据库连接
2010-06-26 19:21 9691> 几种主流数据库的 JDBC 驱动加载注册的代码// ... -
java Jdbc调用存储过程
2010-06-12 19:38 972Java调用存储过程本文阐 ... -
JDBC调用存储过程
2010-06-12 19:35 1009import java.sql.*; public c ... -
如何用JDBC给存储过程传递数组类型的参数
2010-06-12 19:33 1742A . 嵌套表 1. 声明数组类型 create ... -
jdbc调用存储过程
2010-06-12 18:56 1570jdbc调用存储过程,输入参数设置比较简单,暂略。存储过程定义 ...
相关推荐
主要给大家介绍了关于Spring boot调用Oracle存储过程的两种方式及完整代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
使用SimpleJdbcCall调用存储过程 11.5.6. 声明SimpleJdbcCall使用的参数 11.5.7. 如何定义SqlParameters 11.5.8. 使用SimpleJdbcCall调用内置函数 11.5.9. 使用SimpleJdbcCall返回的ResultSet/REF Cursor 11.6...
MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm...
使用SimpleJdbcCall调用存储过程 11.5.6. 声明SimpleJdbcCall使用的参数 11.5.7. 如何定义SqlParameters 11.5.8. 使用SimpleJdbcCall调用内置函数 11.5.9. 使用SimpleJdbcCall返回的ResultSet/REF Cursor 11.6...
12.4. Oracle TopLink 12.4.1. SessionFactory 抽象层 12.4.2. TopLinkTemplate 和 TopLinkDaoSupport 12.4.3. 基于原生的TopLink API的DAO实现 12.4.4. 事务管理 12.5. iBATIS SQL Maps 12.5.1. iBATIS 1.x和2.x的...
12.4. Oracle TopLink 12.4.1. SessionFactory 抽象层 12.4.2. TopLinkTemplate 和 TopLinkDaoSupport 12.4.3. 基于原生的TopLink API的DAO实现 12.4.4. 事务管理 12.5. iBATIS SQL Maps 12.5.1. iBATIS 1.x和...
Spring IOC 控制反转:把创建对象的权利交给Spring 创建对象 1.无参构造 2.静态工厂 3.实例工厂 管理对象 对象关系DI 构造器注入 set注入 生命周期 scope:prototype/singleton init-...
Spring Framework 开发参考手册 Rod Johnson Juergen Hoeller Alef Arendsen Colin Sampaleanu Rob Harrop Thomas Risberg Darren Davison Dmitriy Kopylenko Mark Pollack Thierry Templier Erwin ...
在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...
这是Hibernate3引入的新特性,对于包含重量级大数据的表字段,这种抽取方式提高了对大字段操作的灵活性,否则加载Tfile对象的结果集时如果总是返回fileContent,这种批量的数据抽取将可以引起数据库的"洪泛效应"。...
在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...
直接从SQL语句问题贴子数据建表并生成建表语句的存储过程 从SQL中的一个表中导出HTML文件表格 获取數据库表的前N条记录 几段SQL Server语句和存储过程 生成表中的数据的脚本 最详细的SQL注入相关的命令整理 Oracle ...
21、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 10 22、我们在web 应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,...
21、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 10 22、我们在web 应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,...
开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...
14.7 映射集 301 14.7.1 Map接口及含义 301 14.7.2 HashMap类的使用 302 14.7.3 Hashtable类的使用 303 14.7.4 LinkedHashMap类的使用 304 14.7.5 SortedMap接口与TreeMap类 305 14.7.6 映射的遍历 ...
19、用JDBC如何调用存储过程 69 20、JDBC中的PreparedStatement相比Statement的好处 71 21、写一个用jdbc连接实例。 71 22、ArrayList和Vector的区别? 73 23、List、Set和Map的区别? 74 24、Collection 和 ...