mybatis 模糊查询报错: java.sql.SQLException: ORA-01006: 绑定变量不存在
来源:互联网 发布:网络推广总监 编辑:程序博客网 时间:2024/06/01 09:48
今天做一个借口,简单的模糊查询,刚开始这样写的:
select distinct(vehicle_number) from TBL_PARKING_LOT_RECORD where
lower(vehicle_number) like lower('%#{vehicleNumber}%')
立马出异常:java.sql.SQLException: ORA-01006: 绑定变量不存在。
研究了半天,发现自己还是对mybatis的传参机制不太了解。改成下面就好了(红色部分):
select distinct(vehicle_number) from TBL_PARKING_LOT_RECORD where
lower(vehicle_number) like lower('%${vehicleNumber}%')以前知道有区别,但是没怎么注意,这次是学习了。
"#"传参:
Preparing: select password from tbl_parking_lot_account where account = ? and password = ?
2015-06-24 09:38:20,016 DEBUG (JakartaCommonsLoggingImpl.java:46) - ==> Parameters: admin(String), admin(String)
"$"传参:
Preparing: select distinct(vehicle_number) from TBL_PARKING_LOT_RECORD where lower(vehicle_number) like lower('%b%')
2015-06-24 09:39:02,048 DEBUG (JakartaCommonsLoggingImpl.java:46) - ==> Parameters:
另外转载一篇文章,学习了。mybatis中的#和$的区别
1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".
2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id.
3. #方式能够很大程度防止sql注入。
4.$方式无法防止Sql注入。
5.$方式一般用于传入数据库对象,例如传入表名.
6.一般能用#的就别用$.
MyBatis排序时使用order by 动态参数时需要注意,用$而不是#
字符串替换
默认情况下,使用#{}格式的语法会导致MyBatis创建预处理语句属性并以它为背景设置安全的值(比如?)。这样做很安全,很迅速也是首选做法,有时你只是想直接在SQL语句中插入一个不改变的字符串。比如,像ORDER BY,你可以这样来使用:
ORDER BY ${columnName}
这里MyBatis不会修改或转义字符串。
重要:接受从用户输出的内容并提供给语句中不变的字符串,这样做是不安全的。这会导致潜在的SQL注入攻击,因此你不应该允许用户输入这些字段,或者通常自行转义并检查。
转载:http://weijun726.blog.163.com/blog/static/87342299201362652950398/
- mybatis 模糊查询报错: java.sql.SQLException: ORA-01006: 绑定变量不存在
- 解决java.sql.SQLException: ORA-01006: 绑定变量不存在
- java.sql.SQLException: ORA-01006: 绑定变量不存在
- java.sql.SQLException: ORA-02289: 序列不存在
- Mybatis报java.sql.SQLException
- Caused by:java.sql.SQLException:ORA-01008:并非所有变量都已绑定
- Orcale对DBUtils不支持模糊查询(Exception:java.sql.SQLException: ORA-00904)的原因与解决
- mybatis java.sql.SQLException: ORA-00907: 缺失右括号
- mybatis java.sql.SQLException: ORA-00907: 缺失右括号
- Java 连接Oracle 报错: java.sql.SQLException: ORA-28040: No matching authentication protocol
- mybatis XML 模糊查询报错
- quartz1.5.0链接数据库报错java.sql.SQLException: ORA-00904: "PRIORITY": 无效的标识符
- exlipse 执行sql语句 报 java.sql.SQLException: ORA-01013 报错用户请求取消当前的操作
- java.sql.SQLException: ORA-08102
- java.sql.SQLException: ORA-01428
- java.sql.SQLException: ORA-01841
- mybatis报错:java.sql.SQLException: 无效的列类型: 1111
- 一次诡异的事故:ora-01006绑定变量不存在,ora-01002,提取违反次序!
- 关于listView.setAdapter(adapter)报空指针异常的问题
- 2012年百度校园实习招聘题目及解答
- Swift 2 if case 用法
- 各分词工具介绍
- Linux的SOCKET编程详解
- mybatis 模糊查询报错: java.sql.SQLException: ORA-01006: 绑定变量不存在
- JScrollPane中添加JPanel不出现滚动条
- android开发 获取logcat日志并记录(方便离线调试)
- 嫌工资少,先来看看你值多少钱
- mysql 删除语句几种常见的用法
- SGU180:Inversions(树状数组)
- jQuery的$("#id")和document.getElementById("id")的区别
- 做电子商务网站建设是的小技巧
- Android中实现远程输入