最近的JAVA工程中用到了DB4O,确实是一个不错的数据库,第一次用到存储对象的数据库感到还挺新鲜的,对一个ObjectContainer进行基本的操作,理解起来要比关系数据库来得直观。但是使用这种数据库很容易产生数据的冗余,不然的话查询起来也挺麻烦的;另外在数据的更新方面也要十分小心,数据很容易因为疏忽没有写进数据库。

在利用它进行WEB开发的过程中,遇到了一个很奇怪的问题:执行下面的语句

ObjectSet<Ids> allIds =db.queryByExample(Ids.class);

此语句查询数据库中所有的Ids类的对象,但是很奇怪,返回的是com.db4o.reflect.generic.GenericObject,直接导致后面的赋值出现了问题。为什么会出现这个问题呢?我琢磨了好久,最后终于在不断的尝试后发现了问题,问题在于db4o-7.12.145.14409-all-java5这个JAR包在%JAVA_HOME%/jre/lib/ext下和WEB工程的WEB-INF\lib目录下都存在,导致冲突的产生,将任意一个删除即可解决问题,这也许不是一个特例,在其他的情况下不知道会不会遇到这样的错误。

但是从web工程的角度来讲,最好还是将所需要的jar文件放置在对应工程的WEB-INF\lib目录下,方便web工程的转移,也使得工程的依赖结构清晰,减少不必要的麻烦。当然,如果web工程所需的servlet需要直接在工程下产生,这时就需要将所需的外部JAR放置到jre/lib/ext目录下,这样编译才会通过。

建议还是使用ECLIPSE等工具,直接在服务器上运行和测试,没有问题后将WebContent下的东西拷到服务器目录下,方便查错,同时也减少类似于上述的错误。

给自己提个醒,也希望对于其他朋友有所帮助java.lang.ClassCastException解决方法