hibernate查询数据库没有问,但写数据库就出现下面错误
环境:
tomcat4.1.29
hibernate-3.0
jdk1.4.2
mysql 4.0.21
Servlet2.3
red hat 9.0
我在网上查过这个问题,大部分都说:用JDBC 3.0 就可了, 也就是用mysql-connector-java3.0.10-stable-bin.jar
问题来了:
1.我项目的lib内的mysql-connector已是:mysql-connector-java-3.1.12-bin.jar
2.我是购买的虚拟主机,我无权更改服务器上tomcat的设置,也就是无权将mysql-connector-java-3.1.12-bin.jar考到tomcat的lib目录下,
请问现在我应怎样解决?
java.lang.AbstractMethodError: com.mysql.jdbc.jdbc2.Connection.prepareStatement(Ljava/lang/String;[Ljava/lang/String;)Ljava/sql/PreparedStatement;
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.hibernate.util.GetGeneratedKeysHelper.prepareStatement(GetGeneratedKeysHelper.java:45)
at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:435)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:93)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:1948)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2398)
at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:37)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:243)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:269)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:167)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:101)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:98)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:531)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:523)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:519)
at com.websound.demo.service.UserServiceImpl.saveQuestion(UserServiceImpl.java:420)
at com.websound.demo.actions.QuestionNewSaveAction.executeAction(QuestionNewSaveAction.java:42)
at com.websound.demo.framework.BaseAction.execute(BaseAction.java:159)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:98)
at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:176)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:172)
at com.websound.demo.framework.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:29)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213)
at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:98)
at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:176)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:172)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2417)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:193)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:309)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:387)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:673)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:615)
at org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:786)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:666)
at java.lang.Thread.run(Thread.java:534)
问题点数:100、回复次数:14Top
1 楼onkey1999(忆江南信息网:http://www.donfor.com|2006冲刺NET)回复于 2006-04-02 15:20:01 得分 0
期待源代码的发布,呵~!学习Top
2 楼Saro(这也不是江水,这是二十年流不尽的英雄血。)回复于 2006-04-02 15:26:00 得分 50
1.我项目的lib内的mysql-connector已是:mysql-connector-java-3.1.12-bin.jar
-------------
那就可以了啊?为什么要把它放在tomcat的lib下。你是怎么得到dataSource的?Top
3 楼cer(大侠(cer))回复于 2006-04-02 15:49:13 得分 0
但写数据库还是不行啊...都是报上面的错
我没用到dataSource
我要把它放在tomcat的lib下是在网上查了别人的说是这样:
http://spring.jactiongroup.net/viewtopic.php?t=629&highlight=&sid=538e1b56c43d8b51b8b10496d97299bbTop
4 楼Saro(这也不是江水,这是二十年流不尽的英雄血。)回复于 2006-04-02 17:54:21 得分 0
应该是jar加载的顺序问题,加载了老版本的驱动。
创建 MAINFEST.MF 文件,写入:
Manifest-Version: 1.0
Created-By: Sun
Class-Path: a.jar
Class-Path: b.jar
Class-Path: c.jar
...............
把所有依赖包都写进去
然后把你项目的所有的class打成jar包,打包的时候把上面的mf文件包含进入(参考jar -help),和依赖包放在lib目录,classes目录清空。
试试看,看是否能行。
Top
5 楼cer(大侠(cer))回复于 2006-04-03 08:58:15 得分 0
我试试,谢谢 : Saro(这也不是江水,这是二十年流不尽的英雄血。)Top
6 楼cer(大侠(cer))回复于 2006-04-03 10:02:10 得分 0
试了一下,还是不行啊Top
7 楼dreams1981(子山)回复于 2006-04-03 10:11:12 得分 50
关注...Top
8 楼cer(大侠(cer))回复于 2006-04-03 10:29:33 得分 0
提示这样的错误:
2006-4-3 10:13:38 java.util.jar.Attributes read
警告: Duplicate name in Manifest: Class-PathTop
9 楼Saro(这也不是江水,这是二十年流不尽的英雄血。)回复于 2006-04-03 11:00:51 得分 0
警告: Duplicate name in Manifest: Class-Path
你定义了相同名字的Class-Path.检查一下mf文件
另外 注意一下顺序。Top
10 楼cer(大侠(cer))回复于 2006-04-03 11:37:31 得分 0
应是不能有多个Class-Path,我现在这样处理的,只有一个Class-Path,然后多个.jar之间用空格分开,然后换行,在本地没问题了...已传到服务器...希望没有问题....
另外,多个jar还有顺序问题吗?Top
11 楼Saro(这也不是江水,这是二十年流不尽的英雄血。)回复于 2006-04-03 12:36:07 得分 0
那应该是我弄错了,我只是在以前部署ejb时候弄过manifest.mf文件。多个jar我记得应该是有顺序的,没有也没关系,多试试吧。Top
12 楼cer(大侠(cer))回复于 2006-04-03 12:44:08 得分 0
OK...主要是我买的虚拟机...没办法让我多试啊Top
13 楼cer(大侠(cer))回复于 2006-04-03 19:53:19 得分 0
我今天在本机用jdbc2.0代替jdbc3.0后发现根本不能查询,所以应不是jdbc的问题,我现在的情况是,只能查询数据库,但不能写数据,这是为什么啊?Top
14 楼cer(大侠(cer))回复于 2006-04-04 19:17:08 得分 0
问题找到了,是由于当前环境不支持,数据库自动编号,换存uuid就可以了Top




