MySQL的驱动引起Hibernate无法正常运行的问题

来源:互联网 发布:苏州软件开发 编辑:程序博客网 时间:2024/04/28 01:59

本文适合阅读者:看过Hibernate的中文文档,并且亲自尝试了在应用程序中使用,并且成功的人;同时熟悉Tomcat中连接池配置的人。

原来看过关于Hibernate的应用,那时是在应用程序中使用的;最近有时间,继续学习,准备在Web中尝试。按照Hibernate的中文文档 与猫同乐这节,亲自动手尝试。

开发环境:JBuilder X Tomcat 5.0.16MySQL  4.0.16

首先使用过MySQL的朋友知道,MySQLJDBC驱动有两种,一个是单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