/**
   * protected Hashtable[] doJDBC(String dbname_, String sql_, // Connection con, boolean goNative_,
   * long offset_, int maxsize_, boolean robotquery_, Connection con) throws SQLException
   */
  public void init() throws Exception {

    try {
      if (!outcon) {
        tx = TransactionManager.getTransaction();
        if (tx == null) {
          con = SQLUtil.getSQLManager().requestConnection(dbname); // 事务无处理,批处理的默认事务处理需要设定
          if (needTransaction) {
            this.oldautocommit = con.getAutoCommit();
            con.setAutoCommit(false);
          }
        } else {
          try {
            con = tx.getConnection(dbname);
          } catch (TransactionException e) {
            try {
              tx.setRollbackOnly();
            } catch (Exception ei) {

            }
            throw e;
          }
        }
      } else {
        if (this.con != null && this.con instanceof TXConnection) {
          tx = TransactionManager.getTransaction();
        }
      }
    } catch (Exception e) {
      throw e;
    }
  }
  public void errorHandle(Exception sqle) throws SQLException {

    if (outcon) // 使用外部链接
    {

      if (tx != null && this.con != null && this.con instanceof TXConnection) {
        try {
          tx.setRollbackOnly();
        } catch (Exception ei) {

        }
      }
    } else // 没有使用外部链接
    {
      if (tx != null) {
        try {
          tx.setRollbackOnly();
        } catch (Exception ei) {

        }
      } else if (con != null) {
        if (this.needTransaction) {
          try {
            con.rollback();
          } catch (Exception e) {

          }
          try {
            con.setAutoCommit(this.oldautocommit);
          } catch (Exception e) {

          }
        }
      }
    }

    if (sqle instanceof SQLException) throw (SQLException) sqle;
    else if (sqle instanceof TransactionException) {
      Throwable e = ((TransactionException) sqle).getCause();
      if (e == null) {
        throw new NestedSQLException(sqle.getMessage(), sqle);
      } else if (e instanceof SQLException) throw (SQLException) e;
      else throw new NestedSQLException(sqle.getMessage(), sqle);

    } else throw new NestedSQLException(sqle.getMessage(), sqle);
  }
Esempio n. 3
0
  /**
   * 同步当前缓冲中存放的对应表的最大值与数据库表中最大值
   *
   * @throws SQLException
   */
  protected void synchroDB(Connection con) throws SQLException {
    //		Connection con = null;
    Statement stmt = null;
    ResultSet rs = null;
    JDBCTransaction tx = null;
    boolean outcon = true;

    try {
      if (con == null) {
        tx = TransactionManager.getTransaction();
        if (tx == null) {
          con = SQLManager.getInstance().requestConnection(dbname);
        } else {
          con = tx.getConnection(dbname);
        }
        outcon = false;
      }
      stmt = con.createStatement();

      rs = stmt.executeQuery(maxSql);
      long temp = 0;
      if (rs.next()) {
        temp = rs.getLong(1);
      }
      if (temp >= this.curValue) {
        curValue = temp + 1;
      }

      //			else if(temp < this.curValue )
      //			{
      //
      //				curValue = temp + 1;
      //
      //				System.out.println("curValue=========:" + curValue);
      //			}
    } catch (SQLException e) {
      //			log.error("同步当前缓冲中表[" + tableName + "]的主键[" + primaryKeyName
      //					+ "]最大值与数据库该表主键最大值失败,系统采用自动产生的主键:" + e.getMessage());
      throw new NestedSQLException(
          "同步当前缓冲中表[" + tableName + "]的主键[" + primaryKeyName + "]最大值与数据库该表主键最大值失败,系统采用自动产生的主键:", e);
    } catch (TransactionException e) {

      //			e.printStackTrace();
      //			log.error("同步当前缓冲中表[" + tableName + "]的主键[" + primaryKeyName
      //					+ "]最大值与数据库该表主键最大值失败,系统采用自动产生的主键:" + e.getMessage());
      throw new NestedSQLException(
          "同步当前缓冲中表[" + tableName + "]的主键[" + primaryKeyName + "]最大值与数据库该表主键最大值失败,系统采用自动产生的主键:", e);
      //			throw new SQLException(e.getMessage());
    } finally {
      if (con != null) {
        JDBCPool.closeResources(stmt, rs);
        if (!outcon) {

          if (tx == null) {
            JDBCPool.closeConnection(con);
          }
        }
      }
      con = null;
    }
  }