请把原理说出来, 出现异常的语句: conn.setAutoCommit(false);java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Can't start ma
nual transaction mode because there are cloned connections.
        at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source
)
        at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
        at com.microsoft.jdbc.base.BaseConnection.setAutoCommit(Unknown Source)
        at com.perlong.poa.common.dao.ChitAction.sendChit(ChitAction.java:114)
        at com.perlong.poa.common.dao.servlet.ChitServlet.doGet(ChitServlet.java
:61)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:252)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:173)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
alve.java:214)
        at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv
eContext.java:104)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:520)
        at org.apache.catalina.core.StandardContextValve.invokeInternal(Standard
ContextValve.java:198)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
alve.java:152)
        at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv
eContext.java:104)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:520)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
ava:137)
        at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv
eContext.java:104)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
ava:118)
        at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv
eContext.java:102)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:520)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
ve.java:109)
        at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv
eContext.java:104)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav
a:520)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)        at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:16
0)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
:799)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proce
ssConnection(Http11Protocol.java:705)
        at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java
:577)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP
ool.java:684)
        at java.lang.Thread.run(Thread.java:595)

解决方案 »

  1.   

    在建立connection之后,需要立即修改autocommit。如果在connection使用中,许多jdbc驱动都不可以修改autocommit的属性了。 Jdbc-odbc好象也是这样子。
      

  2.   

    我也用过你说的代码
    怎么没出现你的问题
    把代码贴出来看看先!以下是我的代码
    看看对你有没有什么帮助!
    con = DriverManager.getConnection(url, "", "");
    stmt = con.createStatementResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
    con.setAutoCommit(false);
      

  3.   

    楼上好像说对了
    就是的,应该在生成连接之后就修改AutoCommit属性
      

  4.   

    Can't start manual transaction mode because there are cloned connections.because there are cloned connections不知道是不是楼主的代码里有con.clone()之类的东西呢?
      

  5.   

    重用Connection当然没有问题,关键是以下两点:1.不要对Connection对象进行clone之类的操作,因为那样虽然名义上看起来好像变成了2个Connection对象,但实际上对应着一个Database的connection,这样如果同时通过这个connection进行访问,肯定会出错2.要注意对Connection对象池的管理,不要让不同的请求使用同一个Connection对象。