`
zhongzhihua
  • 浏览: 313788 次
  • 来自: ...
社区版块
存档分类
最新评论

spring可以方便的访问oracle的存储过程、函数

    博客分类:
  • java
阅读更多

spring文档举了一个访问sysdate的例子,它不需要输入参数,使用如下:

public class TestStoredProcedure {

public static void main(String[] args) {
TestStoredProcedure t = new TestStoredProcedure();
t.test();
System.out.println("Done!");
}

void test() {
DriverManagerDataSource ds = new DriverManagerDataSource();
ds.setDriverClassName("oracle.jdbc.OracleDriver");
ds.setUrl("jdbc:oracle:thin:@localhost:1521:mydb");
ds.setUsername("scott");
ds.setPassword("tiger");

MyStoredProcedure sproc = new MyStoredProcedure(ds);
Map results = sproc.execute();
printMap(results);
}

private class MyStoredProcedure extends StoredProcedure {

private static final String SQL = "sysdate";

public MyStoredProcedure(DataSource ds) {
setDataSource(ds);
setFunction(true);
setSql(SQL);
declareParameter(new SqlOutParameter("date", Types.DATE));
compile();
}

public Map execute() {
// the 'sysdate' sproc has no input parameters, so an empty Map is supplied...
return execute(new HashMap());
}
}

private static void printMap(Map results) {
for (Iterator it = results.entrySet().iterator(); it.hasNext(); ) {
System.out.println(it.next());
}
}
}

但是如果访问带输入参数的function怎么办?很简单,只是要注意,输出参数的声明一定要放在输入参数声明的前面。否则,返回值永为null

如下:

public class TestStoredProcedure {

public static void main(String[] args) {
TestStoredProcedure t = new TestStoredProcedure();
t.test();
System.out.println("Done!");
}

void test() {
DriverManagerDataSource ds = new DriverManagerDataSource();
ds.setDriverClassName("oracle.jdbc.OracleDriver");
ds.setUrl("jdbc:oracle:thin:@localhost:1521:mydb");
ds.setUsername("scott");
ds.setPassword("tiger");

MyStoredProcedure sproc = new MyStoredProcedure(ds);
Map results = sproc.execute();
printMap(results);
}

private class MyStoredProcedure extends StoredProcedure {

private static final String SQL = "youfunc";

public MyStoredProcedure(DataSource ds) {
setDataSource(ds);
setFunction(true);
setSql(SQL);

//一定要注意顺序,将OUt放在前面,否则,你的返回值永远为null

declareParameter(new SqlOutParameter("myrt", Types.varchar));
declareParameter(new SqlParameter("pIN", Types.varchar));
compile();
}

public Map execute() {
// the 'sysdate' sproc has no input parameters, so an empty Map is supplied...

Map m=new HashMap();

m.put("PIn","test");
return execute(new HashMap());
}
}

private static void printMap(Map results) {
for (Iterator it = results.entrySet().iterator(); it.hasNext(); ) {
System.out.println(it.next());
}
}
}

分享到:
评论

相关推荐

    Mybatis传list参数调用oracle存储过程的解决方法

    通过上述步骤,我们可以使用Mybatis将List类型参数传递给Oracle存储过程,实现批量插入数据。这种方法可以摆脱Mybatis批量插入数据的诸多限制,例如不能实时返回主键、foreach标签循环集合长度有限制等问题,并且...

    struts2+spring+ibatis+oracle整合的登陆系统

    总结来说,"struts2+spring+ibatis+oracle整合的登陆系统"是一个综合性的Web应用示例,它展示了如何利用Struts2处理用户交互,Spring管理依赖和事务,iBatis执行数据库操作,以及Oracle存储数据。这样的整合方案为...

    oracle 触发器实时调用java 中http接口

    在Oracle数据库中,触发器是一种特殊类型的存储过程,它会在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时自动执行。在这个场景中,我们关注的是一个特定的触发器,它在插入数据后被调用,并通过存储过程来...

    SPRINGMVC +SPRING + ORACLE

    2. **PL/SQL**: Oracle扩展的SQL,支持存储过程、函数、触发器等。 3. **表和字段**: 数据存储的基本单元,表由列(字段)组成。 4. **索引**: 提高查询性能的机制,分为唯一索引、非唯一索引、全文索引等。 5. **...

    spring boot 1.2.3,spring framework4.1.6,mybatis,lombok,oracle的一个sample

    3. **起步依赖**: 通过`spring-boot-starter`模块,你可以方便地引入所需功能的起步依赖,如`spring-boot-starter-web`、`spring-boot-starter-data-jpa`等,避免了冗余的pom.xml配置。 4. **命令行接口(CLI)**: ...

    struts2+spring+ibaites+oracle+CURD

    4. Oracle数据库:理解Oracle的数据类型、表结构设计、索引、存储过程和函数的使用,以及SQL语句(DML、DDL、DQL、DCL)的编写和优化。 5. CRUD操作:学习如何通过Struts2和iBatis实现对Oracle数据库的增删改查操作...

    springmvc+Oracle实现增删改查

    例如,Oracle的DATE类型可以存储日期和时间,而TIMESTAMP则更精确。在处理时间相关数据时,需要使用适当的Oracle函数进行格式化和比较。 在Eclipse中,我们可以使用内置的Tomcat服务器运行Spring MVC项目。首先,...

    SSH Oracle 工具书

    1. **SQL语法与PL/SQL**:Oracle支持标准SQL以及其特有的PL/SQL语言,后者是一种过程化语言,可以用来创建存储过程、函数和触发器,增强数据库的逻辑处理能力。 2. **数据模型**:理解Oracle中的表、视图、索引、...

    ssh Struts2.2+Hibernate3.6+Spring3.1+oracle 分页示例.zip

    在Oracle数据库中,可以使用ROWNUM伪列或分页函数(如DBMS_RLS.PAGE_QUERY)来实现分页查询。 这个示例项目可能包含以下关键组件: 1. **Action类**:Struts2中的核心组件,负责接收请求并调用业务逻辑。 2. **...

    oracle技术讲座

    5. Web服务与Oracle:Java的JAX-WS和JAX-RS标准允许开发RESTful和SOAP Web服务,这些服务可以无缝地与Oracle数据库交互,实现数据的远程访问和交换。 6. Java与Oracle Advanced Queuing(AQ):Oracle AQ提供消息...

    企业人事管理系统 java+oracle

    Oracle的PL/SQL扩展了SQL的功能,允许编写存储过程、函数和触发器,进一步增强了业务逻辑的处理能力。此外,Oracle的ACID特性(原子性、一致性、隔离性和持久性)确保了数据操作的可靠性。 在系统架构上,通常采用...

    顶级讲师oracle全部课件,最全文档,涉及oracle所有操作,开发必备

    本资源提供了 Oracle 的全面教程,涵盖了 Oracle 的基本使用、函数、存储过程、触发器、复杂查询等高级操作。 基本使用 Oracle 的基本使用包括连接命令、文件操作命令、交互式命令、显示和设置环境变量等。 * ...

    ORACLE &SQL PROGRAMING

    PL/SQL允许开发者编写存储过程、函数、触发器和包,极大地增强了数据库应用程序的逻辑处理能力和性能。通过将业务逻辑封装在数据库内部,PL/SQL可以减少网络传输开销,提高应用程序响应速度,同时也方便了数据库的...

    java学习帮助文档(包括css、jdk、jQuery、oracle、Spring等)

    Oracle的文档通常包括安装指南、SQL语法、数据类型、索引、存储过程等,对于学习数据库管理、查询优化以及系统架构设计的人来说非常有用。 最后,Spring框架是Java企业级应用开发的重要工具,尤其在构建基于Java的...

    oracle视频8

    此外,对于Oracle数据库,了解PL/SQL(Procedural Language/Structured Query Language)也是重要的,它是Oracle特有的过程化SQL语言,用于编写存储过程、函数、包等,增强数据库的功能和灵活性。在视频8中,可能...

    JeeSite 默认MySql,让我们来看看如何更换为Oracle数据库

    1. 存储过程与函数:Oracle和MySQL的存储过程和函数语法有所不同,需要对JeeSite中的相关SQL进行修改。 2. 自增ID:MySQL使用`AUTO_INCREMENT`,而Oracle通常使用`SEQUENCE`。需要创建对应的序列并在插入数据时引用...

    oracle数据库深入设计

    在Oracle编程中,PL/SQL是一种过程化语言,允许开发者创建存储过程、函数、触发器等,以增强数据库的功能和性能。学习PL/SQL工具的使用能够帮助开发者更有效地管理和维护数据库,包括查询、更新、事务处理等操作。 ...

    JDBC连接数据库BaseDao通用类(可以调用存储过程)

    这是因为`CallableStatement`继承自`PreparedStatement`,它专门用于执行存储过程或函数。`CallableStatement`不仅支持预编译语句的所有特性,还提供了对输入/输出参数的支持,这是普通SQL语句所不具备的。 ### ...

    基于SSH的OA办公系统(ORacle版)

    Spring还提供了对数据访问的支持,如JDBC抽象层,以及对Hibernate的集成。 3. Hibernate:Hibernate是一个强大的ORM工具,它简化了Java应用程序与数据库之间的交互。通过将Java对象映射到数据库表,Hibernate自动...

Global site tag (gtag.js) - Google Analytics