本文适合阅读者:看过Hibernate的中文文档,并且亲自尝试了在应用程序中使用,并且成功的人;同时熟悉Tomcat中连接池配置的人。
原来看过关于Hibernate的应用,那时是在应用程序中使用的;最近有时间,继续学习,准备在Web中尝试。按照Hibernate的中文文档” 与猫同乐”这节,亲自动手尝试。
开发环境:JBuilder X 、Tomcat 5.0.16、MySQL 4.0.16、
首先使用过MySQL的朋友知道,MySQL的JDBC驱动有两种,一个是单jar包的(mysql-connector-java-3.1.6-bin.jar),下载地址: http://dev.mysql.com/downloads/ 页面中的” MySQL Connector/J 3.1”推荐使用的。还有一种是两个jar包的(mysql_comp.jar, mysql_uncomp.jar)。这两种包对应的Driver_Class写法也不一样,前者是com.mysql.jdbc.Driver,后者是 org.gjt.mm.mysql.Driver。
我原来一直使用的是两个包的驱动,因为它对中文支持较好,插入数据或从数据库中取数据时,不必在URL后面带参数。所以这次尝试也是使用的它。
首先按照帮助文档写的都一步步做了,当时在办公室用的DB2 7.2,配置了server.xml, hibernate.cfg.xml,Cat.hbm.xml文件一切正常,运行成功。于是决定试试MySQL的数据库。可问题也来了。
将两个包的jar驱动,放入了common/lib下,重新修改server.xml文件,Driver的写法采用” org.gjt.mm.mysql.Driver”。重新启动Tomcat,运行test.jsp页面,出现错误。Tomcat的控制台并没有错误消息,只是在jsp页面中提示:
exception
javax.servlet.ServletException
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:867)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:800)
org.apache.jsp.test_jsp._jspService(test_jsp.java:69)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
root cause
java.lang.ExceptionInInitializerError
testpkg.HibernateUtil.(HibernateUtil.java:16)
org.apache.jsp.test_jsp._jspService(test_jsp.java:49)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
当时我重新检查程序,查看配置文件,可和连DB2的相同,没有大的改动。忽然郁闷了!!!
接下来的几天都被这个问题困扰,我直接在jsp页面中使用连接池都是好的,网上的文章也搜遍了都没这个问题,人家都是用的两个包驱动的写法,都说可以正常运行。
昨天,忽然想了一下,用一个包的驱动试试,于是修改对应配置,一切可以成功。只不过是可以插入中文,但是取出来的时候是问号。所以大家要在URL后面带参数。
好了,希望文章对碰到过同样问题的朋友有所帮助。不过这样的可能性还是很小的。如果大家还有更好的解决办法,希望提供参考。
2005-01-28