论坛首页 综合技术论坛

ibatis中,关于$和#的微妙关系

浏览 7483 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-08-05   最后修改:2010-08-06
CREATE TABLE $creMotoGyomTableName$ AS SELECT * FROM $creBackUpTableName$ WHERE TEISYUTU_HOKENNO = #hokenno#
------------------------

从你的sql可知 你的creBackUpTableName是一个动态的table,
假如你第一次执行这个sql 传入的是table_a,table_a的TEISYUTU_HOKENNO字段是varchar类型,
第二次你执行这个sql,传入的是table_b,table_b的TEISYUTU_HOKENNO字段是int类型,

这样的话,你让系统给你把hokenno变量绑定成什么类型好呢?
所以在不确定具体table的情况下,更加无法确定table的字段是什么类型。
这种情况下只能使用$去拼装sql,不能使用#去绑定变量。





0 请登录后投票
   发表时间:2010-08-06  
用#绑定表名倒是没有试过..确定可以这样写吗?
0 请登录后投票
   发表时间:2010-08-06  
晕倒,这是由于数据库不支持这样的sql语法造成的,所以只能用 $creBackUpTableName$ 。
0 请登录后投票
   发表时间:2010-08-06  
qrg 写道
miaow 写道
建议检查下TEISYUTU_HOKENNO列的SQL类型是啥,hokenno属性的java类型又是啥。
我怀疑TEISYUTU_HOKENNO是数值类型,而hokenno是字符串。呵呵。


TEISYUTU_HOKENNO
hokenno
都是字符类型的。不存在类型不一致的情况。


当存在#这样的符号时,需要首先绑定变量的,绑定变量的时候系统还不知道你要绑定的table是什么,
这样如何知道TEISYUTU_HOKENNO是字符类型?

问题的根本原因在于你的table是动态传入的,系统无法确定TEISYUTU_HOKENNO是什么类型,所有无法绑定hokenno变量,这里只能用$去拼接。
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics