转自:http://javawangzilong.iteye.com/blog/2144317
今天用mybatis创建oracle触发器的时候出现了一点问题,创建触发器的代码如下
- <update id="createTrigger_A_oracle" parameterType="HashMap">
- CREATE OR REPLACE TRIGGER ${triggerName}
- AFTER INSERT ON ${tableName}
- FOR EACH ROW
- BEGIN
- INSERT INTO S_CDC(TABLENAME,MODETYPE,DATASYS,TIMESTAMP) VALUES ('${tableName}', 'A', :NEW.SYSCODE, 'B');
- END;
- </update>
创建的时候报错了:如下:
- ### Error updating database. Cause: java.sql.SQLException: 索引中丢失 IN 或 OUT 参数:: 1
- ### The error may involve com.unissoft.synch.initMapper.createTrigger_U_oracle-Inline
- ### The error occurred while setting parameters
- ### SQL: CREATE OR REPLACE TRIGGER D_PRJ2_0002CDCTger_U AFTER UPDATE ON D_PRJ2_0002 FOR EACH ROW BEGIN INSERT INTO S_CDC(TABLENAME,MODETYPE,DATASYS,TIMESTAMP) VALUES ('D_PRJ2_0002', 'A',:NEW.SYSCODE, 'B'); END;
- ### Cause: java.sql.SQLException: 索引中丢失 IN 或 OUT 参数:: 1
但是创建mysql,sqlserver类似的触发器没有问题
最后发现BEGIN 中插入值的时候用到了:new,
因为这些是写到了xml文件里面,所以我觉得有可能是因为:影响的,
有可能在解析xml文件的时候,:影响了解析,没有办法将:new写入sql语句
但是暂时还没有解决办法(因为是刚涉及mybatis,所以不排除我的写法有问题)
今天这个问题已经解决,解决的方法如下
- <update id="createTrigger_A_oracle" parameterType="HashMap" statementType="STATEMENT">
- CREATE OR REPLACE TRIGGER ${triggerName}
- AFTER INSERT ON ${tableName}
- FOR EACH ROW
- BEGIN
- INSERT INTO S_CDC(TABLENAME,MODETYPE,DATASYS,TIMESTAMP) VALUES ('${tableName}', 'A', :NEW.SYSCODE, 'B');
- END;
- </update>
在原来写的基础上,添加上属性statementType="STATEMENT" ,因为mybatis statementType属性有三种值,(statement,preparedstatement,callablestatement。)默认的值是preparedstatement,预编译的。
因此有可能在预编译的时候没有通过,报了错
后来我查了一下这三者之间的区别:
Statement 每次执行sql语句,数据库都要执行sql语句的编译 ,最好用于仅执行一次查询并返回结果的情形,效率高于PreparedStatement.
PreparedStatement是预编译的,使用PreparedStatement有几个好处
a. 在执行可变参数的一条SQL时,PreparedStatement比Statement的效率高,因为DBMS预编译一条SQL当然会比多次编译一条SQL的效率要高。
b. 安全性好,有效防止Sql注入等问题。
c. 对于多次重复执行的语句,使用PreparedStament效率会更高一点,并且在这种情况下也比较适合使用batch;
d. 代码的可读性和可维护性。
CallableStatement接口扩展 PreparedStatement,用来调用存储过程,它提供了对输出和输入/输出参数的支持。CallableStatement 接口还具有对 PreparedStatement 接口提供的输入参数的支持。
转自:http://javawangzilong.iteye.com/blog/2144317
相关推荐
将Mybatis与Oracle结合,可以创建高效、灵活的数据访问应用。下面将详细阐述如何在Java项目中使用Mybatis来连接和操作Oracle数据库。 1. **Mybatis简介**: Mybatis 是一个基于Java的持久层框架,它解决了Java对象...
《毕业设计校园闲置物品交易系统:基于SpringBoot+MyBatis+Oracle的实现》 本毕业设计项目旨在构建一个高效、便捷的校园闲置物品交易平台,采用先进的Java Web开发框架SpringBoot,结合轻量级持久层框架MyBatis,...
它支持SQL标准,包括PL/SQL编程语言,用于创建存储过程、触发器等。 2. **SpringBoot框架**:SpringBoot简化了Spring的配置,提供了自动配置、内嵌式Web服务器(如Tomcat)、健康检查、Actuator监控等功能。开发者...
但是,Oracle 提供了序列(Sequences)和触发器(Triggers)机制,以实现类似的功能。以下是一个在 Oracle 中创建自增主键的详细步骤: 1. **创建序列**: Oracle 中的序列是一种可以生成唯一整数序列的对象。在这...
同时,为了实现主键自增,我们使用了Oracle数据库的序列(sequence)和触发器(trigger)机制。序列`pda2_user_sequence`用于生成主键值,触发器`id_auto_increment_triger`则在插入新记录时自动填充ID字段。 接着...
2. 确定需要移植的数据库对象,包括序列表、分区表、视图、物化视图、自定义类型、触发器、同义词、存储过程、函数、包等。 3. 统计Oracle数据库基础信息,包括数据库块大小、编码格式等。 4. 统计Oracle数据中的...
与MySQL等其他数据库相比,Oracle在数据类型、存储过程、触发器、分区表等方面有更丰富的功能。在使用Oracle时,我们需要确保XXL-JOB的相关SQL语句和数据结构与Oracle兼容。 在XXL-JOB 2.2.0中,mybatis-mapper文件...
用到了Oracle数据库存储过程、触发器等功能。 系统利用 java 开发,使用 Spring Boot 框架、MyBatis 框架简化逻辑操作; 模板引擎使用 Thymeleaf; 前端同时使用 BootStrap 技术,借鉴已有的后台管理网站模板开发; ...
- **SQL Server**:SQL Server 有自己的存储过程、触发器等,反向工程时可以生成对应的 CRUD 方法。 - **MySQL**:MySQL 的特点是轻量级和快速,但不支持分区表。在反向工程中,可以简化一些处理逻辑。 在实际开发...
本文将深入探讨如何在Spring和MyBatis环境中集成Quartz,并支持MySQL和Oracle等多种数据库。 首先,Quartz的核心概念包括Job(任务)、Trigger(触发器)和Scheduler(调度器)。Job定义了具体要执行的任务,...
数据库文件(.sql)是Oracle数据库的脚本,包含了教务、学生、培训班等相关表的创建语句、初始数据及可能的存储过程和触发器。Oracle是企业级的关系型数据库管理系统,以其稳定性、性能和丰富的特性被广泛使用。在这...
在Oracle数据库中,自增字段通常通过序列(Sequence)和触发器(Trigger)来实现。本篇文章将详细解释如何创建一个自增字段,并通过具体的步骤和代码示例来进行说明。 #### 序列(Sequence) 序列是一种数据库对象...
在Oracle等数据库中,可以创建序列对象,每次调用时返回一个递增的值。触发器则是一种数据库级别的事件监听机制,当特定的DML(数据操纵语言)操作如INSERT、UPDATE或DELETE发生时,触发器可以自动执行额外的逻辑。...
- ORM框架:如Hibernate、MyBatis等,将Java对象映射到Oracle数据库表,简化数据库操作。 4. **Java在Oracle中的应用** - Java Stored Procedures:在数据库中编写和执行Java代码,提供数据库内计算和处理能力。 ...
Oracle数据库提供了一些特有的函数和特性,例如游标、存储过程、触发器等。在Java中,可以调用CallableStatement来执行存储过程。 八、最佳实践 1. 使用PreparedStatement而非Statement,提高性能和安全性。 2. ...
在实践中,你可以期待找到如何创建Oracle数据库表的SQL脚本,如何配置Ibatis以连接Oracle,如何编写和执行SQL语句,以及如何在Java代码中调用这些操作的示例。 总的来说,这个资源将帮助学习者理解以下几个关键知识...
Oracle支持多种高级特性,如存储过程、触发器和分区等,可以提高数据处理的效率和安全性。 5. **CRUD操作**: - **Create**(创建):在添加数据时,我们首先需要在业务层(Service)创建一个新的实体对象,填充...
此外,还需要理解Oracle的数据类型、存储过程、触发器等特性,以便进行高效的数据操作。 在环境搭建过程中,以下是几个关键步骤: 1. **安装与配置**: 首先,确保JDK、Oracle数据库和相关的驱动(ojdbc.jar)已...
此外,Spring Data JPA或MyBatis等ORM(对象关系映射)工具也可以与Oracle数据库协同工作,将数据库操作转换为面向对象的API,提高开发效率。 在实际应用中,Spring的DataSourceTransactionManager可以用来管理事务...