环境:Tomcat6.0.14+ibatis+Struts2.0+Oracle10g
 
问题:
 
ibatis中的resultMap为HashMap所以:result.get("timestamp")返回的是一个oracle.sql.TIMESTAMP但是:(oracle.sql.TIMESTAMP)result.get("timestamp")会出错???!!!更奇怪的是用Tomcat6.0.13则不会出错?!!有哪位高手可以解答一下!!

解决方案 »

  1.   

    把sql映射配置xml,和相应的代码贴出来给我看看
      

  2.   

    timestamp 是个字段  ??也可能跟关键字冲突
      

  3.   

    原因已经找到!!
    ibatis将TIMESTAMP字段封装到HashMap(result)里
    如果我们:
    (oracle.sql.TIMESTAMP)result.get("TIMESTAMP");
    的话会报错,原因在于:
    result.get("TIMESTAMP")(它的类型时oracle.sql.TIMESTAMP)的ClassLoader
    和oracle.sql.TIMESTAMP的ClassLoader不同,所以不能进行类型转换,
    估计是class12.jar放的位置不同。
    在项目工程的lib中加入和在Tomcat的lib中加入,还是不行!!
    在MyEclipse的Appentd to ClassPath中加入,却可以!!!
    问题又来了,这种加入Java包的方法只能在MyEclipse上启动Tomcat才可以运行,
    如果独立启动Tomcat的话,仍然会出现上面的问题,
    请稳哪位高手可以告诉一下怎么在Tomcat的配置文件中将class12.jar加入到classpath中!??
      

  4.   

    更正一开始的问题:当时在MyEclipse中的Tomcat6.0.13是通过Appentd to ClassPath加入class12.jar的
    所以没有出现问题!!
      

  5.   

    最好能显示的指定 javaType=""
      

  6.   

    还有这问题 ??把包加到TOMCAT的通用LIB文件夹下试试 。。
      

  7.   

    不行!在Tomcat和web工程下加都不行!!
      

  8.   

    建议你不要用oracle.sql.TIMESTAMP
    用java.util.Date
      

  9.   

    java.util.Date的精度是多少??
    用oracle.sql.TIMESTAMP是为了做排他!
    即使java.util.Date的精度够,也应该会出现类型不能转换的问题(也就是存入到数据库的是Date,检索出来被
    ibatis封装到HashMap(result)中,再(java.util.Date)result.get("Date"))同样会报错!!
    之前也试过oracle.sql.blob不能进行转换的问题
      

  10.   

    为什么一定要映射到Map呢?
    不能做一个ResultMap吗?
      

  11.   

    我想不管你映射到Map还是映射到自定义的resultMap,映射到Map时ibatis回根据jdbctype来映射到Map中
    如果自定义resultMap,这个映射过程中加载TimeStamp类的classloader也应该和映射到Map时的一样的
      

  12.   

    问题终于解决!!
    原来在struts2的Filter初始化的时候做了一次数据库查询,所以那时候
    Tomcat加载的是Tomcat的lib目录下的class12.jar,而在我们的web工程
    运行的过程中加载java.sql.Timestamp的是在web工程中的lib目录下的
    class12.jar,所以会造成他们的classLoader不同!!所以在发布到Tomcat
    后,只要把工程中的lib目录下的class12.jar删掉就行了!!