锁定老帖子 主题:ibatis中,关于$和#的微妙关系
精华帖 (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,不能使用#去绑定变量。 |
|
返回顶楼 | |
发表时间:2010-08-06
用#绑定表名倒是没有试过..确定可以这样写吗?
|
|
返回顶楼 | |
发表时间:2010-08-06
晕倒,这是由于数据库不支持这样的sql语法造成的,所以只能用 $creBackUpTableName$ 。
|
|
返回顶楼 | |
发表时间:2010-08-06
qrg 写道 miaow 写道 建议检查下TEISYUTU_HOKENNO列的SQL类型是啥,hokenno属性的java类型又是啥。
我怀疑TEISYUTU_HOKENNO是数值类型,而hokenno是字符串。呵呵。 TEISYUTU_HOKENNO hokenno 都是字符类型的。不存在类型不一致的情况。 当存在#这样的符号时,需要首先绑定变量的,绑定变量的时候系统还不知道你要绑定的table是什么, 这样如何知道TEISYUTU_HOKENNO是字符类型? 问题的根本原因在于你的table是动态传入的,系统无法确定TEISYUTU_HOKENNO是什么类型,所有无法绑定hokenno变量,这里只能用$去拼接。 |
|
返回顶楼 | |