- 浏览: 842564 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (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 1141JAVA调用ORACLE存储过程小结 一、无返回值的存储过程 ... -
jdbc 如何调用oracle的存储过程
2010-06-30 23:59 980摘要: create or replace procedur ... -
JDBC数据库连接
2010-06-26 19:21 9921> 几种主流数据库的 JDBC 驱动加载注册的代码// ... -
java Jdbc调用存储过程
2010-06-12 19:38 997Java调用存储过程本文阐 ... -
JDBC调用存储过程
2010-06-12 19:35 1034import java.sql.*; public c ... -
如何用JDBC给存储过程传递数组类型的参数
2010-06-12 19:33 1781A . 嵌套表 1. 声明数组类型 create ... -
jdbc调用存储过程
2010-06-12 18:56 1603jdbc调用存储过程,输入参数设置比较简单,暂略。存储过程定义 ...
相关推荐
在Spring Boot应用中,调用Oracle数据库的存储过程有多种方式。本文主要介绍三种方法,包括使用`entityManagerFactory.unwrap(SessionFactory.class).openSession()`、直接使用`EntityManager`的`...
在本文中,我们将为大家介绍 Spring Boot 调用 Oracle 存储过程的两种方式,并提供完整的代码示例。本文主要解决了在 Spring Boot 项目中调用 Oracle 存储过程时遇到的问题,并提供了两种解决方案。 第一种方式:...
Java调用Oracle存储过程是数据库操作中常见的任务,特别是在需要执行复杂业务逻辑或者批量处理数据时。本篇文章将详细介绍如何通过Java与Oracle数据库交互,调用存储过程,并提供几个简单的实例帮助新手理解。 首先...
6. **测试**:最后,我们可以编写JUnit测试用例,验证存储过程是否正确执行并返回预期结果。 通过以上步骤,SSM项目就能成功调用Oracle的存储过程。这种方式不仅方便了代码的组织和维护,还提高了系统的可扩展性和...
4. 处理结果:如果存储过程有返回结果,可以通过`registerOutParameter()`方法预先注册输出参数,然后通过`getXXX()`方法获取返回值。 5. 关闭资源:执行完毕后,记得关闭CallableStatement和Connection,避免资源...
这个存储过程接收两个输入参数`x`和`y`,并计算它们的和,结果存储在输出参数`z`中。 接下来,我们需要在iBATIS的映射文件中配置调用存储过程的语句。映射文件通常以`.xml`为扩展名,例如`emp.xml`。在这个文件中,...
7. **编写Controller**:在Controller中,定义处理HTTP请求的方法,调用Service层的方法,完成业务逻辑,并返回响应结果。 8. **运行测试**:创建`springTest`目录下的测试类,使用JUnit进行单元测试,确保Spring和...
1. **配置Cobar**:首先,你需要在服务器上部署Cobar,并配置其连接到你的Oracle数据库实例。这包括设置服务器地址、端口、连接池参数等。 2. **配置Spring数据源**:在Spring的配置文件中,定义两个或多个...
本实例将详细讲解如何将这三个框架与Oracle数据库进行整合,以构建一个完整的Java Web应用。在这个过程中,我们将涉及到Action、Service、DAO层的设计,以及依赖注入和事务管理等多个重要知识点。 首先,Struts2...
4. **控制层(Controller)**:Struts的Action类,接收请求,调用服务层方法,并返回结果到视图。 5. **视图(View)**:JSP或HTML页面,显示数据和用户交互界面。 6. **配置文件**:如Struts的struts.xml、Spring的...
Spring MVC提供了对数据库存储过程的支持,通过JdbcTemplate或NamedParameterJdbcTemplate等工具类,可以方便地调用存储过程并处理返回的结果。这使得业务逻辑与数据访问层更易于解耦,提高代码的可维护性和复用性。...
这个压缩包"车辆管理系统(struts+hibernate+spring+oracle).zip"显然包含了使用四大技术框架——Struts、Hibernate、Spring和Oracle数据库构建的完整项目源代码。下面我们将深入探讨这四个关键组成部分及其在车辆...
通过以上步骤,你可以得到一个完整的SpringMVC+MyBatis+Oracle的Web应用实例,这对于学习和理解这些技术的结合以及实际开发流程非常有帮助。同时,这个案例也为你提供了一个基础模板,你可以在此基础上扩展出更复杂...
与传统的JDBC相比,iBatis简化了SQL的编写和执行,同时避免了手动管理连接和结果集。在iBatis中,SQL语句被定义在XML配置文件或注解中,与Java代码解耦。通过Mapper接口,开发者可以在服务层调用这些SQL语句,实现...
`JdbcTemplate`通过封装常见的JDBC操作,如执行SQL查询、更新、调用存储过程等,避免了手动管理连接、结果集解析等繁琐工作,提高了代码的可读性和可维护性。开发者只需提供SQL语句和参数,`JdbcTemplate`会自动处理...
在Eclipse中创建一个JUnit测试类,注入`TestService`,并调用其方法进行数据库操作,如查询、插入、更新或删除,以验证MyBatis是否成功连接到Oracle数据库。 通过以上步骤,你就完成了MyBatis连接Oracle数据库的...
Struts2负责接收用户请求,调用相应的Action,Action执行完业务逻辑后,返回一个结果,Struts2根据结果转发到相应的视图,如JSP页面。 总的来说,Struts2、Spring和Hibernate的结合为Java Web开发提供了一种高效、...
标题中的"SSI oracle 工程实例"指的是一个融合了Struts、Spring和iBatis三个框架的Oracle数据库工程示例。这个项目可能是为了演示或教学如何在Java Web开发中有效地集成这三个流行的技术,并且利用Oracle数据库来...