明明已经设置了setAutoCommit(false);为啥还是报错AutoCommit 模式设置为"true"时,无法调用回滚操作.

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了明明已经设置了setAutoCommit(false);为啥还是报错AutoCommit 模式设置为"true"时,无法调用回滚操作.相关的知识,希望对你有一定的参考价值。

代码如下:
public class TranscationInterceptor extends AbstractInterceptor
DBUtil db=new DBUtil();
@Override
public String intercept(ActionInvocation invocation) throws Exception
try
db.getConnection().setAutoCommit(false);
String resultCode = invocation.invoke();//调用action业务方法
db.getConnection().commit();//提交事务
return resultCode;

catch(Exception e)

db.getConnection().rollback();
throw e;

finally

db.closed();



可是仍然报错

type Exception report

message AutoCommit 模式设置为“true”时,无法调用回滚操作。

description The server encountered an internal error that prevented
it from fulfilling this request.

exception
com.microsoft.sqlserver.jdbc.SQLServerException: AutoCommit 模式设置为“true”时,无法调用回滚操作。
com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:171)
com.microsoft.sqlserver.jdbc.SQLServerConnection.rollback(SQLServerConnection.java:1643)
com.xmg.dang.intercerptor.TranscationInterceptor.intercept(TranscationInterceptor.java:20)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)

note The full stack trace of the root cause is available in the
Apache Tomcat/7.0.53 logs.

Connection conn = db.getConnection();
下面都使用conn来操作,不要使用db.getConnection()试试
参考技术A 你确定每次getConnection是同一个连接来的。 参考技术B 可能表引擎是MyISAM

使用jupyter notebook 时明明已经安装了某个lib,还是出现ModuleNotFoundError

这是因为jupyter notebook要选择不同conda环境,但是运行jupyter 的时候,没有使用到这个环境,即使你已经conda activate这个环境,再执行jupyter。

解决方法就是将conda环境写入jupyter notebook的kernel中

在jupyter notebook中不同环境之间是通过切换kernel实现的。在conda环境下创建kernel文件,命令是conda install -n 环境名称 ipykernel。先进入conda的某个环境中,然后执行以下命令。

python -m ipykernel install --user --name 环境名称 --display-name "你希望看见的环境名"
–user --name --displa-name都是参数不同替换。

打开jupyter notebook,更换kernel就可以了。就在jupyter notebook界面上方的kernel---->change kernel中选择即可。


开发者涨薪指南 48位大咖的思考法则、工作方式、逻辑体系

以上是关于明明已经设置了setAutoCommit(false);为啥还是报错AutoCommit 模式设置为"true"时,无法调用回滚操作.的主要内容,如果未能解决你的问题,请参考以下文章

Java Connection.setAutoCommit

映射网络硬盘的时候,明明没有设置密码为啥提示密码错误?

为啥明明已经安装了打印机,可打印的时候却提示尚未安装?

setAutoCommmit保持数据的完整性

记忆不可靠,要相信证据:我明明已经提交了

AD20怎么铺铜?AD怎么铺铜?Altium designer怎么铺铜?AD明明已经铺铜怎么只有框?AD怎么铺不了铜皮?