起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1380|回复: 9

[结贴] 关于baasjava的事务提交回滚错误问题

[复制链接]

76

主题

186

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
QQ
发表于 2016-11-18 10:19:35 | 显示全部楼层 |阅读模式
我对java baas 进行了测试 调试代码中已经if(selfContext) context.rollback(); 执行了。可是。数据库依然没有回滚,前一句依然执行了代码如下:
public static JSONObject UpdateAction(JSONObject params, ActionContext context) throws SQLException, NamingException, java.sql.SQLException {
                String sql1 = "update takeout_food set fStatus = 1 where fName like '%鱼%'";
                String sql2 = "update takeout_foodf set fStatus = 1 where fNamef like '%鸡%'";
                JSONObject rt = new JSONObject();
                //Connection conn = DataUtils.getConnection(DATASOURCE_demo);
                Connection conn = context.getConnection(DATASOURCE_demo);
               
                        //conn.getTransactionIsolation();
                        java.sql.PreparedStatement pstmt1 = null;
                        pstmt1 = conn.prepareStatement(sql1);
                        pstmt1.execute();
                       
                        pstmt1 = conn.prepareStatement(sql2);
                        pstmt1.execute();
                        rt.put("state", "1");
                        //conn.commit();
               
//                finally{
//               
//                 conn.close();
//                 }

                return null;
        }


系统生成的代码如下
public static JSONObject UpdateAction(JSONObject params, ActionContext context) throws Exception{
                boolean selfContext = null==context;
                if(selfContext) context = new ActionContext(getDBConfig());
                if(params.containsKey(ActionContext.REQUEST)) context.put(ActionContext.REQUEST, params.get(ActionContext.REQUEST));
                if(params.containsKey(ActionContext.RESPONSE)) context.put(ActionContext.RESPONSE, params.get(ActionContext.RESPONSE));
                byte[] privateParamBytes = {123,125};
                JSONObject privateParams = JSONObject.parseObject(new String(privateParamBytes,"UTF-8"));
                byte[] publicParamBytes = {123,125};
                JSONObject publicParams = JSONObject.parseObject(new String(publicParamBytes,"UTF-8"));
               
                //进行参数处理
                initActionParams(privateParams,publicParams,params);
               
                try{
                        try {
                                JSONObject ret = TransactionBaasDemo.UpdateAction(params, context);
                                if(selfContext) context.commit();
                                return ret;
                        }catch (Exception e){
                                try {
                                        if(selfContext) context.rollback();
                                } catch (SQLException e1) {
                                }
                                throw e;
                        }
                } finally {
                        if(selfContext) context.closeConnection();
                }
        }

请教教我怎么才能数据完整的回滚。

76

主题

186

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
QQ
 楼主| 发表于 2016-11-18 10:25:31 | 显示全部楼层
2016-11-18 10:24:58 Action[test/TransactionBassDemo/UpdateAction]执行失败,Table 'demo.takeout_foodf' doesn't exist
java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at com.justep.baas.action.Engine.execAction(Unknown Source)
        at com.justep.baas.action.Engine.execAction(Unknown Source)
        at com.justep.baas.servlet.BaasServlet.execService(Unknown Source)
        at com.justep.baas.servlet.BaasServlet.service(Unknown Source)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
        at java.lang.Thread.run(Thread.java:745)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'demo.takeout_foodf' doesn't exist
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:400)
        at com.mysql.jdbc.Util.getInstance(Util.java:383)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:980)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3847)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3783)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2447)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2594)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2545)
        at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1901)
        at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1193)
        at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)
        at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)
        at test.TransactionBaasDemo.UpdateAction(TransactionBaasDemo.java:33)
        at test.TransactionBassDemo__do.UpdateAction(TransactionBassDemo__do.java:43)
        ... 20 more
com.justep.baas.action.ActionException: Action[test/TransactionBassDemo/UpdateAction]执行失败,Table 'demo.takeout_foodf' doesn't exist
        at com.justep.baas.action.Engine.execAction(Unknown Source)
        at com.justep.baas.action.Engine.execAction(Unknown Source)
        at com.justep.baas.servlet.BaasServlet.execService(Unknown Source)
        at com.justep.baas.servlet.BaasServlet.service(Unknown Source)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        ... 16 more
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'demo.takeout_foodf' doesn't exist
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:400)
        at com.mysql.jdbc.Util.getInstance(Util.java:383)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:980)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3847)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3783)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2447)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2594)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2545)
        at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1901)
        at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1193)
        at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)
        at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)
        at test.TransactionBaasDemo.UpdateAction(TransactionBaasDemo.java:33)
        at test.TransactionBassDemo__do.UpdateAction(TransactionBassDemo__do.java:43)
        ... 20 more
十一月 18, 2016 10:24:58 上午 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet WeX5_Baas_Servlet threw exception
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'demo.takeout_foodf' doesn't exist
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:400)
        at com.mysql.jdbc.Util.getInstance(Util.java:383)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:980)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3847)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3783)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2447)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2594)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2545)
        at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1901)
        at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1193)
        at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)
        at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)
        at test.TransactionBaasDemo.UpdateAction(TransactionBaasDemo.java:33)
        at test.TransactionBassDemo__do.UpdateAction(TransactionBassDemo__do.java:43)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at com.justep.baas.action.Engine.execAction(Unknown Source)
        at com.justep.baas.action.Engine.execAction(Unknown Source)
        at com.justep.baas.servlet.BaasServlet.execService(Unknown Source)
        at com.justep.baas.servlet.BaasServlet.service(Unknown Source)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
        at java.lang.Thread.run(Thread.java:745)
回复 支持 反对

使用道具 举报

发表于 2016-11-18 11:23:09 | 显示全部楼层
wongitop 发表于 2016-11-18 10:25
2016-11-18 10:24:58 Action[test/TransactionBassDemo/UpdateAction]执行失败,Table 'demo.takeout_foodf ...

请在确认下数据库中 字段 fStatus  原来的值是不是1
按理说是自动回滚了的! 建议您再仔细确认下!确保以前的现在的值是有变化的!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

76

主题

186

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
QQ
 楼主| 发表于 2016-11-18 11:48:24 | 显示全部楼层
本帖最后由 wongitop 于 2016-11-18 11:52 编辑
liangyongfei 发表于 2016-11-18 11:23
请在确认下数据库中 字段 fStatus  原来的值是不是1
按理说是自动回滚了的! 建议您再仔细确认下!确保以 ...

原来都是0,我测试过了。的确不能回滚的。我不知道为什么不能回滚。另外我想问一下能不能同时执行2条或者多条语句,我故意将第二条语句写错,但是不能回滚第一条语句的结果。
回复 支持 反对

使用道具 举报

发表于 2016-11-18 11:56:23 | 显示全部楼层
wongitop 发表于 2016-11-18 11:48
原来都是0,我测试过了。的确不能回滚的。我不知道为什么不能回滚。另外我想问一下能不能同时执行2条或者 ...

你好楼主,这个问题需要我在本地环境进行问题重现,所以会花费较长时间,请你耐心等待,我完成后会第一时间反馈结果,谢谢!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

发表于 2016-11-18 12:59:51 | 显示全部楼层
自己java 文件 中添加一行代码

conn.setAutoCommit(false);
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

76

主题

186

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
QQ
 楼主| 发表于 2016-11-18 13:36:49 来自手机 | 显示全部楼层
谢谢
回复

使用道具 举报

76

主题

186

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
QQ
 楼主| 发表于 2016-11-18 15:40:09 | 显示全部楼层
liangyongfei 发表于 2016-11-18 12:59
自己java 文件 中添加一行代码

conn.setAutoCommit(false);

我加了。不行的。还不是不能回滚。
回复 支持 反对

使用道具 举报

76

主题

186

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
QQ
 楼主| 发表于 2016-11-18 15:40:44 | 显示全部楼层
liangyongfei 发表于 2016-11-18 12:59
自己java 文件 中添加一行代码

conn.setAutoCommit(false);

有没有完整的例子呢?我这里不行的。
回复 支持 反对

使用道具 举报

76

主题

186

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
QQ
 楼主| 发表于 2016-11-22 16:16:34 | 显示全部楼层
正确代码为:public static JSONObject UpdateAction(JSONObject params, ActionContext context) throws SQLException, NamingException, java.sql.SQLException {
                String sql1 = "update takeout_food set fStatus = 1 where fName like '%鱼%'";
                String sql2 = "update takeout_foodf set fStatus = 1 where fNamef like '%鸡%'";
                JSONObject rt = new JSONObject();
                //Connection conn = DataUtils.getConnection(DATASOURCE_demo);
                Connection conn = context.getConnection(DATASOURCE_demo);
               
                        conn.getTransactionIsolation(false);
                        java.sql.PreparedStatement pstmt1 = null;
                        pstmt1 = conn.prepareStatement(sql1);
                        pstmt1.execute();
                        
                        pstmt1 = conn.prepareStatement(sql2);
                        pstmt1.execute();
                        rt.put("state", "1");
                        conn.commit();}cath(Exception e){
       conn.reback();
}
               
//                finally{
               
//                 conn.close();
//                 }

                return null;
        }
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2025-6-23 00:46 , Processed in 0.093398 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表