大家好我是菜鸟我有一个问题
我用的是Hibernate+struts+mysql
我想对数据库中的一条记录进行修改方法是:
public void upCity(int cityId) {
String s = "update Cityscenery set provinceId=?,cityName=?,cityEn=?,contryPronoun=?,employeeId=?,citySceneryRe=?,citySceneryDate=? where cityId="+ cityId;

Session session = HibernateSessionFactory.getSession();

Transaction t = session.beginTransaction();

Query q = session.createQuery(s);

q.setParameter(0, provinceId);
q.setString(1, cityName);
q.setString(2, cityEn);
q.setString(3, contryPronoun);
q.setParameter(4, employeeId);
q.setString(5, citySceneryRe);
q.setDate(6, citySceneryDate) int i = q.executeUpdate();

t.commit();

}
标红的地方是对数据库中的日期字段进行更新Date citySceneryDate = new Date();为什么在页面中的显示是2008-08-07 00:00:00.0  他把后边的时间都归零了这是为什么很是纳闷哦 !~请高人教教俺!~!~

解决方案 »

  1.   

    估计 Cityscenery 表的 citySceneryDate 字段是个 DATE 类型,把它改成 DATETIME 类型再试试看。
      

  2.   

    另外,WHERE cityId="+ cityId; 最好能改成 WHERE cityId = ?";后面再加个;q.setInt(7, cityId);这样比较好一些,呵呵  :)
      

  3.   


    预备语句会放在缓存中,下次再调的时候直接从缓存中取。你这样一般放在缓存,一半自己组装,效率会有一点点影响。另外,既然是用hibernate+struts,更新的时候为什么不自动组装呢?
      

  4.   

    2008-08-07 00:00:00.0这个是DATETIME类型的....要2008-08-07这个结果就改成DATE类型的
      

  5.   

    2008-08-07 00:00:00.0 这个不是我想要的结果我想让他把我的时间 hh:mm:ss也打出来 而不是零 还有一个问题 为什么后边还有一个 0 啊 不想要他哦怎么去掉呢
      

  6.   

    SQL 语句不在万不得已的时候不要采用字符串拼接的方式。原因就是 JDBC 中 Statement 和 PreparedStatement 的区别:1,效率问题。由于 SQL 得交给 DBMS 去编译并执行,如果每次都是动态拼接的话,
    导致 SQL 每次都是不一样 DBMS 会每次都去检查语法、编译等操作。而采用占位符
    的话,这个 SQL 就是一样的,DBMS 只会在第一次进行语法检查和编译,下次再是同
    一个时就会从它自己的缓冲区中取出相同的东西。2,安全问题。采用字符串拼接 SQL 的话,会存在 SQL 注入安全漏洞,而采用占位符
    的话不存在这个问题,因为这样的 SQL DBMS 是预编译的,然后再把参数填进去的,参
    数中的 SQL 关键字会被当作普通字符参数处理。3,代码的复杂度。如果一个 SQL 语句有很多参数需要传递,采用字符串拼接的话,单引
    号、双引号光这些就能把人给弄晕掉。而占位符的话,看上去就比较干净,也比较符合面
    向对象的思维。以我的理解基本上就是以上几个优点。=================================================5 楼所说的自动组装,我不大会 Hibernate 以我的理解是使用 Session 的 update 方法直接更新。Cityscenery city = new Cityscenery();
    city.setCityId(cityId);
    city.setPrivinceId(privinceId);
    city.setCityName(cityName);
    city.setCityEn(cityEn); 
    city.setContryPronoun(contryPronoun); 
    city.setEmployeeId(employeeId); 
    city.setCityScenerRe(citySceneryRe); 
    city.setCitySceneryDate(citySceneryDate);public void upCity(Cityscenery city) {
        ....
        session.update(city);
        ....
    }