首页 > 数据库 >MyBatis连接Oracle数据库的细节错误总结

MyBatis连接Oracle数据库的细节错误总结

时间:2023-03-05 18:33:04浏览次数:43  
标签:语句 name 数据库 占位 MyBatis sql Oracle age ###

错误一

错误提示

org.apache.ibatis.exceptions.PersistenceException: 
### Error updating database.  Cause: java.sql.SQLSyntaxErrorException: ORA-00911: 无效字符

### The error may exist in mapper/UserMapper.xml
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: insert into t_user(name,age) values(?,?);
### Cause: java.sql.SQLSyntaxErrorException: ORA-00911: 无效字符

mapper配置信息

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xy.mybatis.mapper.UserMapper">
    
    <insert id="insertUser">
        insert into t_user(name, age)
        values (#{name}, #{age});
    </insert>
</mapper>

错误原因

Mybatis连接Oracle数据库其sql语句不能添加分号(;)

修改配置

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xy.mybatis.mapper.UserMapper">

    <insert id="insertUser">
        insert into t_user(name, age)
        values (#{name}, #{age})
    </insert>
</mapper>

错误二

错误提示

org.apache.ibatis.exceptions.PersistenceException: 
### Error updating database.  Cause: java.sql.SQLSyntaxErrorException: ORA-00984: 列在此处不允许

### The error may exist in mapper/UserMapper.xml
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: insert into t_user(name, age)         values (smith, 28)
### Cause: java.sql.SQLSyntaxErrorException: ORA-00984: 列在此处不允许

mapper配置信息

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xy.mybatis.mapper.UserMapper">
    
    <insert id="insertUser">
        insert into t_user(name, age)
        values (${name}, ${age})
    </insert>
</mapper>

错误原因

错误的使用了#和$导致sql语句出错

'#'占位符的特点

  1. MyBatis处理 #{ } 占位符,使用的 JDBC 对象是PreparedStatement 对象,执行sql语句的效率更高。
  2. 使用PreparedStatement 对象,能够避免 sql 注入,使得sql语句的执行更加安全。
  3. { } 常常作为列值使用,位于sql语句中等号的右侧;#{ } 位置的值与数据类型是相关的。

'$'占位符的特点

  1. MyBatis处理 ${ } 占位符,使用的 JDBC 对象是 Statement 对象,执行sql语句的效率相对于 #{ } 占位符要更低。
  2. ${ } 占位符的值,使用的是字符串连接的方式,有 sql 注入的风险,同时也存在代码安全的问题。
  3. ${ } 占位符中的数据是原模原样的,不会区分数据类型。
  4. { } 占位符常用作表名或列名,这里推荐在能保证数据安全的情况下使用 ​{ }。

修改配置为

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xy.mybatis.mapper.UserMapper">

    <insert id="insertUser">
        insert into t_user(name, age)
        values (#{name}, #{age})
    </insert>
</mapper>

其他注意事项

  • Mapper接口如果返回的是List如List,即便是sql语句本身返回是空集合,接口的返回结果的集合size均为1,且唯一的值为泛型类型的默认值。
  • oracle+ibatis若返回值类型为Map,且查询字段有别名,若想通过别名get到对应的value值,sql语句在定义别名时需将别名用双引号包裹起来,因为oracle在返回时将全部字段转为大写了,或者在get的时候用大写的字段作为key值。

标签:语句,name,数据库,占位,MyBatis,sql,Oracle,age,###
From: https://blog.51cto.com/learningfish/6101570

相关文章

  • 数据库的操作
    sql通用语法SQL分类DDL操作数据库表结构,表中字段的创建数据库createschematest;createdatabasestest;创建表示例createtableuser(idintnullcomment......
  • Mybatis 和 Mybatis Plus 的区别(面试)
    MybatisPlusMybatis-Plus是一个Mybatis的增强工具,只是在Mybatis的基础上做了增强却不做改变,MyBatis-Plus支持所有Mybatis原生的特性,所以引入Mybatis-Plus不会对现有的Myb......
  • mysql主从数据库状态检测(php)
    实例:<?php/***检测多个主从数据库是否挂掉*建立从数据库$slave_db的二维数组,内容包含每个从服务器的配置数据*/header("Content-Type:text/html;charset=utf-8");set......
  • MySQL数据库备份恢复
    拓扑图:推荐步骤:使用MySQLdump对数据库数据库中表一个数据库多个表所有数据库进行备份模拟数据丢失恢复备份的数据 配置MySQL数据库开启二进制日志功能配置二进制日志切割......
  • 数据库多表查询之 where & INNER JOIN
    在多表查询中,一些SQL开发人员更喜欢使用WHERE来做join,比如:SELECTa.ID,b.Name,b.DateFROMCustomersa,SalesbWHEREa.ID=b.ID;缺点:在上面语句中,实际上是创建了两张......
  • 使用Oracle Outline锁定SQL执行计划
    文档课题:使用OracleOutline锁定SQL执行计划.1、相关概念Oracle的Outline技术可在某些情况下保证执行计划的稳定性.应用场景:A、短时间内无法完成SQL的优化任务,此时可使用out......
  • (数据库系统概论|王珊)第九章关系查询与关系优化:习题
    ​​pdf下载:密码7281​​​​专栏目录首页:【专栏必读】(考研复试)数据库系统概论第五版(王珊)专栏学习笔记目录导航及课后习题答案详解​​名词解释代数优化:是指关系代数表达式......
  • (数据库系统概论|王珊)第九章关系查询与关系优化:习题
    pdf下载:密码7281专栏目录首页:【专栏必读】(考研复试)数据库系统概论第五版(王珊)专栏学习笔记目录导航及课后习题答案详解目录名词解释简答题应用题名词解释代数优化:是......
  • mybatis分页插件的使用
    引入依赖<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.2.0</version></depend......
  • ORACLE数据库高水位线(high water mark).
    来源:ORACLE数据库高水位线(highwatermark)-墨天轮(modb.pro) 文档课题:ORACLE数据库高水位线(highwatermark).1、相关概念ORACLE数据库逻辑结构包括:数据库块(bloc......