这个java问题如何解决
是一个sql执行速度太长导致的问题 ,确实好慢
(一个sql
分3个子操作,
truancate 
insert .....
update....  有时候 执行速度过长的
)java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1056)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3376)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3308)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1837)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1961)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2543)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1737)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2022)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1940)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1925)
at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeUpdate(

解决方案 »

  1.   

    顶楼上这个月已经结帖子100多了。 static{
    optimizeSqlList.add("Truncate table a");
    optimizeSqlList.add("insert into `a` ( 。 from UserEntity");
    optimizeSqlList.add("update a inner join (select max(lastaccess) mtime, ip ,Id from SessionLog group by Id ) b On a.id=b.Id set a.ip=b.ip");
    }   这里SessionLog 是一个800万的大表
    核心代码如下
    try {
    Connection conn=DBConnectionManager.getConnection();
    Statement statement = conn.createStatement();
    optimizeDB(statement,optimizeSqlList);
    } catch (SQLException e) {
    System.out.println("Load failure, please check it.");
    }客观的说 实在等待时间过长   sql的update时间不是一般的 长