在线考试系统随记1

再次着手做在线考试系统的第一天.

用到Oracle11GR2数据库、Tomcat6.0、Hibernate、Struts2.

之前用的是mysql数据库,这次直接把建表语句拿来用了,在bit上的时候遇见了问题.

提示“ORA-00902: 无效数据类型”。

把建表语句中的"bit"改成了"numeric(1,0)"给解决了.

用MyEclipse8.5中的Hibernate工具

在把数据库的表自动转换成各个类完成后,发现有些小问题,数据类型不对.

表中的id字段我都用的是numeric(11,0),映射到实体类的时候,都变成了java.lang.Float类型.

而numeric(1,0)映射到实体类的时候,都是java.lang.Boolean类型.

在9个实体类中,把java.lang.Float和Boolean改掉,解决了这个小问题.

在网页上运行注册的时候又发生了错误

弹出了我写的提示"注册失败",回到控制台中看抛出的异常.

提示"序列不存在"

又查看了show_sql设置显示出的语句"select hibernate_sequence.nextval from dual"

想了想,貌似我没有创建这个序列,因为是注册用户功能,涉及的是User类,而我的User表主键是用户名,不用序列自增。

所以到了User.hbm.xml中看了一下<id>标签的内容

在<id>标签中,有一行<generator class="native" />

我既然也没有指定序列,老师又说过这个是根据本地自增,所以我猜应该是这句话的问题。

果断剪切下来,redeploy一下。

注册功能又能用了。登录也成功了。

本以为这个功能就实现了,但是回到数据库中查看了一下用户表,发现刚才创建的用户根本没有插入到数据库中,点了一下工具栏上的commit再查一遍,依然没有该记录。

进入到action,确定了action没有错误,又进入了UserDAO().save()方法,看到里面又用到了getSession().save()方法,点击进去是字节码文件了,真心看不懂。

想起老师演示的时候貌似需要打开Transaction,看了下课上代码,创建了一个Transaction的对象,持久化对象前先session.beginTransaction(),保存结束后再commit()一下。

之后再到数据库里查,这条记录出现了,和期望的值是一样的。


好吧,之前没有想到的问题今天遇到了,还好自己都解决了...

最后把今天没有想到的代码记录一下

public void save(Users transientInstance) {
Session session = getSession();
Transaction tx = session.beginTransaction();
log.debug("saving Users instance");
try {
getSession().save(transientInstance);
tx.commit();
log.debug("save successful");
} catch (RuntimeException re) {
log.error("save failed", re);
if (tx != null) {
tx.rollback();
}
throw re;
} finally {
session.close();
}
}


新手一个,如果这篇博文有不正确的地方请指正,之前没有写过博客,怎么才能高效运用博客?希望看到这篇博文的朋友指导下,谢谢!

你可能感兴趣的:(数据库,网页,控制台,在线考试)