锁定老帖子 主题:ibatis中,关于$和#的微妙关系
精华帖 (0) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-08-02
对于以下的SQL文 /////////////////////////////////////////////////////////////////////////////////////////////////////////// CREATE TABLE $creMotoGyomTableName$ AS SELECT * FROM $creBackUpTableName$ WHERE TEISYUTU_HOKENNO = #hokenno# /////////////////////////////////////////////////////////////////////////////////////////////////////////// 如果,变量hokenno的两边是用#括起来的话,那么就会报Ora-01027: bind variables not allowed for data definition operations的错误,但是把#修改为$以后的话,就没有这个问题了。 鄙人知道$在Ibatis中是会把两边的单引号【'】去掉的,而#是不会去掉【'】。 这是什么问题呢?这个地方为什么不能用#呢? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-08-02
这么理解吧:
$ 用来标示sql 语法的一部分 比如 select * from $tablename$; # 用来标示sql里数据部分。 比如oralce的绑定变量 另外$不建议使用,如果你乱来, 导致大量的sql注入安全漏洞。 |
|
返回顶楼 | |
发表时间:2010-08-02
ibatis2我不清楚,但是ibatis3官方文档是有明确说明,#{} 会导致底层使用PreparedStatement,${}只是字符串替换
|
|
返回顶楼 | |
发表时间:2010-08-02
sdh5724 写道 这么理解吧:
$ 用来标示sql 语法的一部分 比如 select * from $tablename$; # 用来标示sql里数据部分。 比如oralce的绑定变量 另外$不建议使用,如果你乱来, 导致大量的sql注入安全漏洞。 关于这点语法,我是知道的,现在的问题是,为什么这块会报绑定错误的error呢? |
|
返回顶楼 | |
发表时间:2010-08-02
racnow 写道 ibatis2我不清楚,但是ibatis3官方文档是有明确说明,#{} 会导致底层使用PreparedStatement,${}只是字符串替换
官方只是给出了这两个的基本语法区别,关于更深的东西是没有详细解说的,所以现在出现了,当使用我上述的SQL文 的时候,会出现绑定异常之类的错误,这是为什么? |
|
返回顶楼 | |
发表时间:2010-08-03
打印一下生成后的SQL,看看就明白了。
从你描述中觉得应该是生成后的SQL语法是有问题的,所以才会导致错误产生。 如果你使用了Log4j,请使用Debug模式使SQL输出。 |
|
返回顶楼 | |
发表时间:2010-08-03
是呀,打印看看,或者读读文档
|
|
返回顶楼 | |
发表时间:2010-08-04
建议检查下TEISYUTU_HOKENNO列的SQL类型是啥,hokenno属性的java类型又是啥。
我怀疑TEISYUTU_HOKENNO是数值类型,而hokenno是字符串。呵呵。 |
|
返回顶楼 | |
发表时间:2010-08-04
miaow 写道 建议检查下TEISYUTU_HOKENNO列的SQL类型是啥,hokenno属性的java类型又是啥。
我怀疑TEISYUTU_HOKENNO是数值类型,而hokenno是字符串。呵呵。 TEISYUTU_HOKENNO hokenno 都是字符类型的。不存在类型不一致的情况。 |
|
返回顶楼 | |
发表时间:2010-08-05
hokenno是什么形式?举个例子吧
|
|
返回顶楼 | |