this.getHibernateTemplate().bulkUpdate("DELETE FROM Manage bean WHERE bean.id in (?)",new Short(str));}
这里的bean.id  是 short类型的   这样写或者直接写str 不加new Short 都会报类型转换错误
delete from manage bean where bean.id in("+str+") 这样就不会报错误了 ,但是我不想这么写 
执行这句  "delete from manage bean where bean.id in(?)",str的时候  会报str 转换到short的异常      我该怎么解决这个异常啊  或者还有什么更好的方法?    万分感谢  

解决方案 »

  1.   

    这个str的形式,是不是已经是 '1','2','3' 这样的形式了?
      

  2.   

    是主键?那就是已经是 1,2,3 这样的形式了? String str = "1,2,3"; LZ,是这样吗?
      

  3.   

    bean.id in("+str+") in里面怎么可能接受整形的参数呢?
      

  4.   

    即使是in(1)也要使用this.hibernateTemplate.bulkUpdate(queryString, "1")
      

  5.   

    楼上的回复 很感谢 不过始终没告诉我 该怎么解决啊 sql 的in方法  很明显   允许接收 1,2,3     传进来的  也确实是 "1,2,3" 这个字符串问题就在他为什么会报 类型转换错误     虽然  id 是short类型的  但是  使用in方法的时候 他为什么还要转换类型那?     我感觉  在哪个事件中  应该将str里的 值 分成数组  挨个转换    但是  不知道该在哪个事件里写..   不明白他底下做了什么
      

  6.   

    我晕啦,不明白?
    传递1的时候
    hibernateTemplate.bulkUpdate(queryString, "1");
    传递1,2,3的时候
    hibernateTemplate.bulkUpdate(queryString, "1,2,3")
      

  7.   

    String比shhort范围大多了。、、肯定不能转的。。你说只是报异常那try。。catch下可以不。。
      

  8.   

    in 里面接收的是多个值,或者一个集合
    你传一个字符进去当然会出错了把str里的东西拆开装到集合
    或者把值一个一个放进去
    delete from manage bean where bean.id in("+str+")这样没错
    但是能得到你想要的数据吗??
      

  9.   

    这个问题以前有人问过的:
    http://topic.csdn.net/u/20090807/09/b5a395c2-46ea-4593-a13f-fe8d193c5a21.html
      

  10.   

    我先回复第二块内容    这样的写法没错  结果完全正确第一块的内容  拆分了 一个一个放进去   完全可以     可是有in   为什么还要这么做那
    可能懒是一方面   还有一方面  我感觉in关键字的语句 只执行一次 就可以了吧
    如果循环的话  效率也会不好的吧还有12楼的链接地址   非常感谢    但是他解决的方法 也是 循环做的啊有in  为什么不用那?   方便的方法为什么不用那?
    in  接受的是多个值  或一个集合   我完全赞成     select * from table where id in('1,2,3,4')  这样写是没错的啊 
    我总感觉 hibernate 会考虑到这一方面  毕竟 in 很常用吗    应该会有解决的办法吧   (不是指for)
      

  11.   

    select * from table where id in('1,2,3,4')
    如果id是string的那没错,如果是数值型,那就会出错
    String aa = "1,2,3,4";
    select * from table where id in("+aa+")
    id数值型,没错
    id字符型,报错这些错误都是存在了隐士转换在数据库执行的时候to_char()或者to_number()了
    这个是关于HQL的IN问题你的new Short(str),想必你的str="1,2,3"是这样形式的,
    那转换的时候他当然会出错误,一个字符行转换到整形,如果str="1"你在转换,是否还出错呢;解决方法:把str拆开组成一个short数组传进去以上是我仔细看后总结了一下,有错的地方,大家讨论指出
    错误是一种进步嘛
      

  12.   

    哎,,,   有 in   为什么还循环   为什么非要把一个符合标准的字符串转型那
    #15楼 <!--
    select * from table where id in('1,2,3,4') 
    如果是数值型,那就会出错
    --> 你的下面这句话   也许你是指 hql      我不晓得他hql 到 sql是怎么变化的   如果是sql的话   我用了好几年了  他从来就没报过错   in 做运算的时候  本来就会吧括号里的内容 当做集合来做    他还有什么理由报错的!!!我喜欢能有更理想的解决方法    就像select * from table where id in("+aa+") 这样一样   不要类型转换  不是用户拼凑的sql语句   select * from table where id in(?),aa  就向这样 
      

  13.   

    select * from table where id in('1,2,3,4') 
    这句如果是SQL,ID是数值型,同样会报错,
    他不会把'1,2,3,4'当成集合,他只会把他当成一个字符,然后to_number
    我的数据库是oracle10g哥们,我不知道你如何理解in
    但我的理解就是in里面就是一个集合,
    你要给他一个他能识别的集合
    愚见
      

  14.   

    另外in的效率和or的一样,都不好
    不是非常情况,一般不用,在oracle里面
    regexp_like也可以当in用,效率好很多
    这个就能很好支持你的那个情况
    不过HQL不支持
      

  15.   

    hql语句是字符串类型的,当然不能直接连接一个short类型的变量,必须把它转化为String