`

奇怪的iBatis 乱码问题,insert正常update乱码且与日期有关

阅读更多
domain: ResourceType,Resource
dao:  ResourceTypeDao , ResourceDao

public class Resource   {
        private Long id;

private String name;

private String label;

private ResourceType resourceType;

private Date createdTime;

private Date modifiedTime;
.........................
}

问题:在写测试代码时,先创建了一个ResourceType保存到数据库中,再创建一个Resource保存到数据库,之后再更改Resource对象的属性update数据库中记录,但此时,Resource的name属性在数据库中就成了乱码,但其它的String类属性都 正常,且name属性的乱码与中英文无关。更奇怪的事,当不给第一次保存和之后更新时如果不给Resource的Date类的字段赋值,就一切正常,或不使用ResourceTypeDao创建并保存ResourceType对象而是直接先在数据库中写好的话,也不会出现乱码。
      错误(乱码)与产生这一错误的影响因素(Resource中的时间, 使用第一个ResourceTypeDao  )  。脑袋中目前是真想不出有什么联系,还请帮帮忙!


另外测试过如果ResourceDao如果不用iBatis而有JDBC实现,就不会有问题。
public static void main(String[] args) {

ApplicationContext context = new FileSystemXmlApplicationContext("D:/workspace/rhyton/src/spring-config/applicationContext*.xml");

ResourceTypeDao resourceTypeDao = (ResourceTypeDao) context.getBean("resourceTypeDao");

ResourceDao resourceDao = (ResourceDao) context.getBean("resourceDao");


ResourceType resType = new ResourceType();
resType = new ResourceType();
resType.setName("菜单");
resType.setResCode("1");
resourceTypeDao.save(resType);


Resource res = new Resource();
res.setLabel("label");
res.setName("name");
res.setResourceType(resType);
res.setModifiedTime(new Date());
res.setCreatedTime(new Date());
resourceDao.save(res);


Resource aResource = resourceDao.get(res.getId());
System.out.println(aResource);

res.setLabel("label-中文-9");
res.setName("name-中文-9");
res.setModifiedTime(new Date());
res.setCreatedTime(new Date());
resourceDao.save(res);

aResource = resourceDao.get(res.getId());
System.out.println(aResource);

}


日志如下:

log4j:WARN No appenders could be found for logger (com.rhyton.framework.component.orgAuth.dao.ResourceDaoTest).
log4j:WARN Please initialize the log4j system properly.
2008-05-14 11:04:42,766 DEBUG [java.sql.PreparedStatement] - {pstm-100001} Executing Statement: SELECT RH_COMMON_SEQ.nextval as id from dual
2008-05-14 11:04:42,766 DEBUG [java.sql.PreparedStatement] - {pstm-100001} Parameters: []
2008-05-14 11:04:42,766 DEBUG [java.sql.PreparedStatement] - {pstm-100001} Types: []
2008-05-14 11:04:42,938 DEBUG [java.sql.PreparedStatement] - {pstm-100003} Executing Statement:       INSERT INTO RH_RES_TYPES ( RES_TYPE_ID, TYPE_NAME, RES_CODE) VALUES (?,?,?) 
2008-05-14 11:04:42,938 DEBUG [java.sql.PreparedStatement] - {pstm-100003} Parameters: [622, 菜单, 1]
2008-05-14 11:04:42,938 DEBUG [java.sql.PreparedStatement] - {pstm-100003} Types: [java.lang.Long, java.lang.String, java.lang.String]
2008-05-14 11:04:42,969 DEBUG [java.sql.PreparedStatement] - {pstm-100005} Executing Statement: SELECT RH_COMMON_SEQ.nextval as id from dual
2008-05-14 11:04:42,969 DEBUG [java.sql.PreparedStatement] - {pstm-100005} Parameters: []
2008-05-14 11:04:42,969 DEBUG [java.sql.PreparedStatement] - {pstm-100005} Types: []
2008-05-14 11:04:42,984 DEBUG [java.sql.PreparedStatement] - {pstm-100007} Executing Statement:       INSERT INTO RH_RES ( RES_ID, RES_NAME, RES_LABEL, CTIME, MTIME, RES_TYPE_ID) VALUES (?,?,?,?,?,?) 
2008-05-14 11:04:42,984 DEBUG [java.sql.PreparedStatement] - {pstm-100007} Parameters: [623, name, label, 2008-05-14 11:04:42.969, 2008-05-14 11:04:42.969, 622]
2008-05-14 11:04:42,984 DEBUG [java.sql.PreparedStatement] - {pstm-100007} Types: [java.lang.Long, java.lang.String, java.lang.String, java.sql.Timestamp, java.sql.Timestamp, java.lang.Long]
2008-05-14 11:04:42,984 DEBUG [java.sql.PreparedStatement] - {pstm-100009} Executing Statement:    SELECT RES_ID, RES_NAME, RES_LABEL, CTIME, MTIME, RES_TYPE_ID FROM RH_RES t   where t.RES_ID = ? 
2008-05-14 11:04:42,984 DEBUG [java.sql.PreparedStatement] - {pstm-100009} Parameters: [623]
2008-05-14 11:04:42,984 DEBUG [java.sql.PreparedStatement] - {pstm-100009} Types: [java.lang.Long]
com.rhyton.framework.component.orgAuth.domain.Resource@9644f6[
  id=623
  name=name
]com.rhyton.framework.component.orgAuth.domain.Resource@9644f6[
  label=name
  resourceType=com.rhyton.framework.component.orgAuth.domain.ResourceType@964518[
  id=622
  name=<null>
]
  createdTime=Wed May 14 11:04:42 CST 2008
  modifiedTime=Wed May 14 11:04:42 CST 2008
]
2008-05-14 11:04:43,031 DEBUG [java.sql.PreparedStatement] - {pstm-100012} Executing Statement:    UPDATE RH_RES SET RES_NAME=?,RES_LABEL= ?,RES_TYPE_ID= ?,MTIME= ? where RES_ID= ? 
2008-05-14 11:04:43,031 DEBUG [java.sql.PreparedStatement] - {pstm-100012} Parameters: [name-中文-9, label-中文-9, 622, 2008-05-14 11:04:43.031, 623]
2008-05-14 11:04:43,031 DEBUG [java.sql.PreparedStatement] - {pstm-100012} Types: [java.lang.String, java.lang.String, java.lang.Long, java.sql.Timestamp, java.lang.Long]
2008-05-14 11:04:43,031 DEBUG [java.sql.PreparedStatement] - {pstm-100014} Executing Statement:    SELECT RES_ID, RES_NAME, RES_LABEL, CTIME, MTIME, RES_TYPE_ID FROM RH_RES t   where t.RES_ID = ? 
2008-05-14 11:04:43,031 DEBUG [java.sql.PreparedStatement] - {pstm-100014} Parameters: [623]
2008-05-14 11:04:43,031 DEBUG [java.sql.PreparedStatement] - {pstm-100014} Types: [java.lang.Long]
com.rhyton.framework.component.orgAuth.domain.Resource@969aac[
  id=623
  name=�纄-中文-9
]com.rhyton.framework.component.orgAuth.domain.Resource@969aac[
  label=�纄-中文-9
  resourceType=com.rhyton.framework.component.orgAuth.domain.ResourceType@969ac1[
  id=622
  name=<null>
]
  createdTime=Wed May 14 11:04:42 CST 2008
  modifiedTime=Wed May 14 11:04:43 CST 2008
]
2008-05-14 11:04:43,062 DEBUG [java.sql.PreparedStatement] - {pstm-100017} Executing Statement: delete from RH_RES_TYPES where RES_TYPE_ID= ?
2008-05-14 11:04:43,062 DEBUG [java.sql.PreparedStatement] - {pstm-100017} Parameters: [622]
2008-05-14 11:04:43,062 DEBUG [java.sql.PreparedStatement] - {pstm-100017} Types: [java.lang.Long]
2008-05-14 11:04:43,125 DEBUG [java.sql.PreparedStatement] - {pstm-100019} Executing Statement: delete from RH_RES_TYPES where RES_TYPE_ID= ?
2008-05-14 11:04:43,125 DEBUG [java.sql.PreparedStatement] - {pstm-100019} Parameters: [null]
2008-05-14 11:04:43,125 DEBUG [java.sql.PreparedStatement] - {pstm-100019} Types: [null]
分享到:
评论

相关推荐

    ibatis UPDATE 动态XML与insert

    标题 "ibatis UPDATE 动态XML与insert" 涉及到的是MyBatis框架中对数据库数据进行更新(UPDATE)和插入(INSERT)操作的动态XML配置方式。MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,...

    ibatis乱码解决方法(ibatis独立)

    本文将详细讨论如何解决Ibatis中的乱码问题,特别是涉及到GBK和ISO_8859_1编码格式时的解决方案。 首先,我们需要了解乱码产生的原因。乱码通常是因为字符编码不一致导致的。在Java和数据库之间进行数据交互时,...

    ibatis应对批量update

    ### ibatis应对批量update 在处理大量数据更新时,传统的for循环方式往往会导致效率低下。这是因为每一次循环都需要执行一次数据库连接操作,对于批量更新来说,这样的处理方式显然不够高效。为了解决这个问题,...

    ibatis的insert方法的返回值

    ibatis的insert方法的返回值。 介绍了mybaits如何处理返回值的问题。

    ibatis教程 输入参数详解

    关于从文档复制代码的问题,以及ibatis的概述、如何开始使用ibatis、构建SqlSessionFactory的方法(包括通过XML和不使用XML的方式)、获取SqlSession的过程、探索映射SQL语句的方法、命名空间的注意事项、作用域与...

    ibatis3批量插入

    通过Ibatis3xml文件配置+Mysql实现数据批量插入,原先在网上找很多,都是关于批量更新,批量插入的很少,而且其写法又完全不同,所以自己研究了一下。可供参考。另外插入时如出现内容报错,请参照my.cnf修改书库配置...

    奇怪的struts2的中文乱码问题及解决.docx

    在Web开发中,Struts2是一个非常流行的动作框架,它与Spring和iBatis等技术结合,可以构建出高效且易于维护的Web应用。然而,开发过程中经常遇到的一个问题就是字符编码问题,尤其是中文乱码问题。本文将深入探讨一...

    ibatis总结 ibatis ibatis ibatis ibatis

    例如,`&lt;select&gt;`标签用于定义查询语句,`&lt;insert&gt;`、`&lt;update&gt;`和`&lt;delete&gt;`分别对应增删改操作。在SQL映射文件中,可以使用动态SQL来处理复杂的查询条件,如`&lt;if&gt;`、`&lt;choose&gt;`、`&lt;when&gt;`、`&lt;otherwise&gt;`等标签。 ...

    ibatis日期格式.doc

    在小组后台管理中,存在以下几个与iBatis相关的问题: 1. **小组分类管理** - **问题1**: 在删除二级分类时,未检查该分类下是否存在分组。这是一个逻辑漏洞,可能导致数据丢失或错误。在iBatis中,可以添加额外的...

    ibatis demo,ibatis例子,ibatis示例

    3. **SqlSession**:SqlSession是Ibatis的核心组件,它提供了执行SQL的方法,如`selectOne`、`insert`、`update`和`delete`。每次数据库操作后,记得关闭SqlSession以释放资源。 4. **动态SQL**:Ibatis的动态SQL...

    简单的ibatis与mysql的交互

    Ibatis的SqlSession对象在这里发挥作用,通过SqlSessionFactory创建SqlSession,然后调用SqlSession的selectOne、insert、update或delete方法执行SQL。 6. **Eclipse工程结构**:一个典型的Ibatis-Mysql项目结构...

    Spring+Struts+Ibatis做的增删改查含有中文乱码处理

    通过这样的整合,我们可以构建出一个功能完备且易维护的Web应用,同时解决了中文乱码问题,提升了用户体验。对于初学者,这个项目提供了很好的学习和实践机会,对于有经验的开发者,也是进一步理解和优化框架集成的...

    mybatis乱码的解决方法

    在`ibatis3_demo`这个示例项目中,可以查看相关的配置文件,如mybatis-config.xml、数据库连接配置、日志配置等,来检查并修正可能出现的编码问题。同时,通过调试和日志输出,可以进一步定位乱码的具体来源,从而...

    IBATIS_IN_ACTION

    《IBATIS_IN_ACTION》是一本深度探讨iBATIS框架应用与实践的专业书籍,由Clinton Begin、Brandon Goodin和Larry Meadors共同编写。本书详细介绍了iBATIS这一流行开源框架的核心概念、工作原理以及在实际项目中的应用...

    Ibatis

    Ibatis 是一个优秀的开源持久层框架,它允许开发者将 SQL 查询与 Java 代码分离,从而避免了传统的 JDBC 编程中的大量模板代码。作为一个轻量级的框架,Ibatis 提供了灵活的映射机制,使得 XML 或注解方式的 SQL ...

    ibatis

    4. 映射文件与接口绑定:Ibatis 支持Mapper接口,通过`@Select`、`@Insert`、`@Update`、`@Delete`等注解,将SQL语句直接写在方法上,简化了编程模型。同时,通过Mapper工厂,可以根据接口生成具体的Mapper实例,...

    ibatis实现数据的操作

    Ibatis的配置文件通常命名为`mybatis-config.xml`,在这里我们可以设置数据源、事务管理器等相关参数。此外,每个数据表对应的业务逻辑通常会有一个独立的Mapper接口,这个接口的实现由Ibatis自动生成,我们只需要在...

    IBatis .NET框架实例

    通过使用XML或注解来配置和映射SQL,IBatis使得数据访问更加灵活且易于维护。 **二、安装与集成** 在.NET项目中引入IBatis通常通过NuGet包管理器完成。安装完成后,需要在项目中配置IBatis的主配置文件(如:ibatis...

    ibatis基本操作数据库

    iBatis,全称为MyBatis iBatis,是一个基于Java的持久层框架,它简化了数据库与应用程序之间的交互,避免了直接编写大量的SQL语句和手动处理结果集。在这个过程中,iBatis提供了一个SQL映射框架,允许开发者将SQL...

    Spring与iBATIS的集成

    Spring与iBATIS的集成 iBATIS似乎已远离众说纷纭的OR框架之列,通常人们对非常流行的Hibernate情有独钟。但正如Spring A Developer's Notebook作者Bruce Tate 和Justin Gehtland所说的那样,与其他的OR框架相比...

Global site tag (gtag.js) - Google Analytics