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

QQ登录

只需一步,快速开始

查看: 5875|回复: 7

[结贴] 批量执行操作

[复制链接]

163

主题

561

帖子

1175

积分

金牌会员

Rank: 6Rank: 6

积分
1175
QQ
发表于 2017-5-26 09:45:51 | 显示全部楼层 |阅读模式
版本: 小版本号:
数据库: 服务器操作系统: 应用服务器:
客户端操作系统: 浏览器:
java 代码如下:
String Sql = "select a.sCode, a.sName from sa_opperson a where not a.sCode in (select fGH from comtomyfck.yfck_yhgl where fYHLB = '"+ fYHLB +"') and a.sValidState = 1";
                        Map sqlMap = new HashMap();
                        sqlMap.put(SQL.DEFAULT_DB_NAME, Sql);
                        sqlMap.put(DatabaseProduct.MSSQL.name(), Sql);
                        Table table = SQL.select(sqlMap,null,"/system/data");
                        Iterator it = table.iterator();
                        //获取当前时间
                        SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                String fUpdateTime = sDateFormat.format(com.justep.system.util.CommonUtils.getCurrentDateTime());
                        while(it.hasNext()){
                                Row row = (Row)it.next();
                                String name = row.getString("sName");
                                String code = row.getString("sCode");
                                String uuid = CommonUtils.createGUID();
                                StringBuffer insertSql = new StringBuffer();
                                insertSql.append("insert into yfck_yhgl select '"+ uuid +"', '0', a.sCode, a.sName, a.sCode, a.sMainOrgPostName, '123456', '000565', '"+fUpdateTime+"', null, null, '"+ fYHLB +"' from x5sys.sa_opperson a where a.sCode = '"+ code +"' and a.sValidState = 1");
                                Map insertSqlMap = new HashMap();
                                insertSqlMap.put(SQL.DEFAULT_DB_NAME, insertSql.toString());
                                insertSqlMap.put(DatabaseProduct.MSSQL.name(), insertSql.toString());
                                SQL.executeUpdate(insertSqlMap, null, "/comtomoa/yfckManager/data");
                                String shellString = "sudo -s /home/samba/smbd/script/createuser.sh -u "+ name +" -p 123456 -a "+code;
                                try {
                                        YfckglUtil.invokShell(shellString, fYHLB);
                                } catch (Exception e1) {
                                        // TODO 自动生成的 catch 块
                                        e1.printStackTrace();
                                }
                                try {
                                        Thread.sleep(2000);
                                } catch (InterruptedException e) {
                                        // TODO 自动生成的 catch 块
                                        e.printStackTrace();
                                }
                        }

错误信息如下:
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.system.action.Engine.invokeActions(Native Method)
        at com.justep.system.action.Engine.invokeActions(Unknown Source)
        at com.justep.business.server.BusinessServer.doAction(Unknown Source)
        at com.justep.business.server.BusinessServer.doExcute(Unknown Source)
        at com.justep.business.server.BusinessServer.excute(Unknown Source)
        at com.justep.business.server.BusinessServer.excute(Unknown Source)
        at com.justep.business.server.BusinessServerServlet.execService(Unknown Source)
        at com.justep.business.server.BusinessServerServlet.service(Unknown Source)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
        at com.justep.x.bs.BusinessServerServlet.service(Unknown Source)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
        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.justep.exception.BusinessException: 编码: JUSTEP150039; 提示: 执行sql: insert into yfck_yhgl select '651A9542E2CD4188B234D5B1FE6E075F', '0', a.sCode, a.sName, a.sCode, a.sMainOrgPostName, '123456', '000565', '2017-05-26 01:00:01', null, null, 'YFCK' from x5sys.sa_opperson a where a.sCode = '000578' and a.sValidState = 1, binds: []出错
        at com.justep.exception.BusinessException.create(Unknown Source)
        at com.justep.system.data.SQL.executeUpdate(Unknown Source)
        at com.justep.system.data.SQL.executeUpdate(Unknown Source)
        at LeaveDaysManager.synPersonToYFCK(LeaveDaysManager.java:410)
        at Common.pushLeaveDay(Common.java:174)
        ... 27 more
Caused by: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:998)
        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.executeUpdate(PreparedStatement.java:2113)
        at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2049)
        at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2034)
        at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105)
        at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105)
        ... 31 more

在本地开发版本中测试没有问题,放到正式环境中,报错?

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36067
发表于 2017-5-26 11:00:12 | 显示全部楼层
java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction

这个是数据库报错的,到网上查找数据库表这个错误的原因
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

163

主题

561

帖子

1175

积分

金牌会员

Rank: 6Rank: 6

积分
1175
QQ
 楼主| 发表于 2017-5-26 11:10:26 | 显示全部楼层
jishuang 发表于 2017-5-26 11:00
java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction

这个是数据库报错的, ...

看了网上的解释,可我的开发环境和正式环境数据库和代码都一模一样,本地开发测试没问题,就只有正式版的那个环境下有问题
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36067
发表于 2017-5-26 14:27:03 | 显示全部楼层
不是代码和数据库一样就没问题的,应该是操了什么操作导致数据库被锁了,要到网上找的是解决方案
http://blog.csdn.net/mangmang2012/article/details/9207007
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

163

主题

561

帖子

1175

积分

金牌会员

Rank: 6Rank: 6

积分
1175
QQ
 楼主| 发表于 2017-5-26 14:49:33 | 显示全部楼层
jishuang 发表于 2017-5-26 14:27
不是代码和数据库一样就没问题的,应该是操了什么操作导致数据库被锁了,要到网上找的是解决方案
http://bl ...

你看下我代码
while(it.hasNext()){
                                Row row = (Row)it.next();
                                String name = row.getString("sName");
                                String code = row.getString("sCode");
                                String uuid = CommonUtils.createGUID();
                                StringBuffer insertSql = new StringBuffer();
                                insertSql.append("insert into yfck_yhgl select '"+ uuid +"', '0', a.sCode, a.sName, a.sCode, a.sMainOrgPostName, '123456', '000565', '"+fUpdateTime+"', null, null, '"+ fYHLB +"' from x5sys.sa_opperson a where a.sCode = '"+ code +"' and a.sValidState = 1");
                                Map insertSqlMap = new HashMap();
                                insertSqlMap.put(SQL.DEFAULT_DB_NAME, insertSql.toString());
                                insertSqlMap.put(DatabaseProduct.MSSQL.name(), insertSql.toString());
                                SQL.executeUpdate(insertSqlMap, null, "/comtomoa/yfckManager/data");
                                String shellString = "sudo -s /home/samba/smbd/script/createuser.sh -u "+ name +" -p 123456 -a "+code;
                                try {
                                        YfckglUtil.invokShell(shellString, fYHLB);
                                } catch (Exception e1) {
                                        // TODO 自动生成的 catch 块
                                        e1.printStackTrace();
                                }
                                try {
                                        Thread.sleep(2000);
                                } catch (InterruptedException e) {
                                        // TODO 自动生成的 catch 块
                                        e.printStackTrace();
                                }
                        }

报错是在update的时候SQL.executeUpdate
网上是说锁了表,平台的方法执行SQL.executeUpdate时候,事务是单独提交的,还是整个Action执行完之后提交的?
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36067
发表于 2017-5-26 16:05:53 | 显示全部楼层
批处理的最后统一提交
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

163

主题

561

帖子

1175

积分

金牌会员

Rank: 6Rank: 6

积分
1175
QQ
 楼主| 发表于 2017-5-26 17:13:28 | 显示全部楼层
jishuang 发表于 2017-5-26 16:05
批处理的最后统一提交

ContextHelper.getTransaction().commit();
这样提交吗?
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36067
发表于 2017-5-26 17:23:55 | 显示全部楼层
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 03:20 , Processed in 0.049740 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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