예제 #1
0
  /**
   * 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;
    }
  }
예제 #2
0
  /**
   * 经过测试证明存储过程中如果没有对插入/删除/修改操作做事务提交、回滚时,可以通过poolman
   * 的事务框架来管理事务;如果存储过程中对插入/删除/修改操作已经做了事务提交或者回滚时,那么应用的事务和存储过程中 中的事务就是分离的两个事务。
   *
   * @param i 为0时回滚事务,1时提交事务
   */
  public @Test void testTest_fWithNameIndexForObjectTx() {
    int i = 1;
    TransactionManager tm = new TransactionManager();
    try {
      tm.begin();
      CallableDBUtil callableDBUtil = new CallableDBUtil();
      callableDBUtil.prepareCallable("{? = call Test_f(?,?,?)}");
      callableDBUtil.registerOutParameter(1, java.sql.Types.INTEGER);
      // 不允许的操作: Ordinal binding and Named binding cannot be combined!

      callableDBUtil.setInt(2, 10);
      callableDBUtil.registerOutParameter(3, java.sql.Types.VARCHAR);
      callableDBUtil.registerOutParameter(4, java.sql.Types.VARCHAR);
      Test_f tets = (Test_f) callableDBUtil.executeCallableForObject(Test_f.class);

      //			System.out.println("name1:" + callableDBUtil.getString("name"));
      //			System.out.println("name2:" + callableDBUtil.getString("name1"));
      System.out.println("Test_f is " + tets);
      callableDBUtil.executeInsert("insert into test(id,name) values('11','name11')");
      if (i == 0) tm.rollback();
      else tm.commit();
    } catch (Exception e) {

      e.printStackTrace();
    } finally {
      tm.release();
    }
  }
  /**
   * 获取频道评论 前n条数据
   *
   * @param n
   * @return
   * @throws SQLException
   */
  public NComentList getChannelCommnetList(String channel, int n) throws Exception {
    Map<String, Object> paramMap = new HashMap<String, Object>();
    paramMap.put("channel", channel);
    paramMap.put("n", n + 1);
    TransactionManager tm = new TransactionManager();
    try {
      tm.begin(tm.RW_TRANSACTION);
      NComentList nComentList = new NComentList();
      nComentList.setComments(
          executor.queryListBean(DocComment.class, "getChannelCommnetNList", paramMap));
      // Container container = new ContainerImpl();
      // container.in
      /*			if (!CollectionUtils.isEmpty(nComentList.getComments())) {
      	for (DocComment docComment : nComentList.getComments()) {
      		String documentUrl= container.getPublishedDocumentUrl(new Integer(docComment.getDocId()).toString());
      		docComment.setDocUrl(documentUrl);
      	}
      }*/
      nComentList.setTotal(getChannelCommentPublishedCount(channel));
      return nComentList;
    } catch (SQLException e) {
      throw e;

    } catch (Exception e) {
      throw e;
    } finally {
      tm.releasenolog();
    }
  }
  public String showAllComments(
      String siteId,
      int docId,
      long channelId,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {
    Container container = new ContainerImpl();
    container.initWithSiteid(siteId, request, request.getSession(false), response);

    TransactionManager tm = new TransactionManager();
    try {

      tm.begin(tm.RW_TRANSACTION);
      // 获得该文档所在的频道评论开关
      int channelCommentSwitch =
          docCommentManager.getDocCommentSwitch(String.valueOf(docId), "chnl");
      if (channelCommentSwitch != 0) {
        // 首先判断频道的评论开关
        request.setAttribute("commentSwitch", channelCommentSwitch);
      } else {
        int documentCommentSwitch =
            docCommentManager.getDocCommentSwitch(String.valueOf(docId), "doc");
        request.setAttribute("commentSwitch", documentCommentSwitch);
      }

      // 获得该文档所在频道的评论审核开关
      Integer aduitSwitchFlag = docCommentManager.getChannelCommentAduitSwitch((int) channelId);
      if (aduitSwitchFlag != null) {
        request.setAttribute("aduitSwitchFlag", aduitSwitchFlag);
      } else {
        request.setAttribute("aduitSwitchFlag", 1);
      }
      Document doc =
          CMSUtil.getCMSDriverConfiguration()
              .getCMSService()
              .getDocumentManager()
              .getPartDocInfoById(docId + "");
      String docurl = container.getPublishedDocumentUrl(doc);
      request.setAttribute("docId", docId);
      request.setAttribute("channelId", channelId);
      request.setAttribute("docurl", docurl);
      request.setAttribute("docTitle", doc.getTitle());
      request.setAttribute("doc", doc);

      return "path:showAllComments";
    } finally {
      tm.releasenolog();
    }
  }
예제 #5
0
  /** 针对oracle Clob字段的插入操作 */
  @Test
  public void testBigClobWrite() {
    PreparedDBUtil dbUtil = new PreparedDBUtil();
    TransactionManager tm = new TransactionManager();
    try {
      // 启动事务
      tm.begin();
      // 先插入一条记录,blob字段初始化为empty_lob
      dbUtil.preparedInsert("insert into test(id,clobname) values(?,?)");
      String id = DBUtil.getNextStringPrimaryKey("test");
      dbUtil.setString(1, id);
      dbUtil.setClob(2, CLOB.empty_lob()); // 先设置空的blob字段

      dbUtil.executePrepared();

      // 查找刚才的插入的记录,修改blob字段的值为一个文件
      dbUtil = new PreparedDBUtil();
      dbUtil.preparedSelect("select clobname from test where id = ?");
      dbUtil.setString(1, id);
      dbUtil.executePrepared();

      CLOB clob = (CLOB) dbUtil.getClob(0, "clobname");
      if (clob != null) {
        DBUtil.updateCLOB(clob, new java.io.File("d:\\route.txt"));
      }
      tm.commit();

    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      try {
        tm.rollback();
      } catch (RollbackException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
      }
    } finally {
      tm = null;
      dbUtil = null;
    }
  }
  /**
   * 获取站点评论 前n条数据
   *
   * @param n
   * @return
   * @throws SQLException
   */
  public NComentList getSiteCommnetList(int n) throws Exception {
    Map<String, Object> paramMap = new HashMap<String, Object>();
    // paramMap.put("docId", docId);
    paramMap.put("n", n + 1);
    TransactionManager tm = new TransactionManager();
    try {
      tm.begin(tm.RW_TRANSACTION);
      NComentList nComentList = new NComentList();
      nComentList.setComments(
          executor.queryListBean(DocComment.class, "getSiteCommnetNList", paramMap));

      nComentList.setTotal(getSiteCommentPublishedCount());
      return nComentList;
    } catch (SQLException e) {
      throw e;

    } catch (Exception e) {
      throw e;
    } finally {
      tm.releasenolog();
    }
  }
  /**
   * 展示文档评论
   *
   * @param docId 文档ID
   * @param request HttpServletRequest
   * @param response HttpServletResponse
   * @return String
   * @throws Exception
   */
  public String showDocumentCommentList(
      int docId, long channelId, HttpServletRequest request, HttpServletResponse response)
      throws Exception {

    TransactionManager tm = new TransactionManager();
    try {

      tm.begin(tm.RW_TRANSACTION); // 获得该文档所在的频道评论开关
      int channelCommentSwitch =
          docCommentManager.getDocCommentSwitch(String.valueOf(docId), "chnl");
      if (channelCommentSwitch != 0) {
        // 首先判断频道的评论开关
        request.setAttribute("commentSwitch", channelCommentSwitch);
      } else {
        int documentCommentSwitch =
            docCommentManager.getDocCommentSwitch(String.valueOf(docId), "doc");
        request.setAttribute("commentSwitch", documentCommentSwitch);
      }

      // 获得该文档所在频道的评论审核开关
      Integer aduitSwitchFlag = docCommentManager.getChannelCommentAduitSwitch((int) channelId);
      if (aduitSwitchFlag != null) {
        request.setAttribute("aduitSwitchFlag", aduitSwitchFlag);
      } else {
        request.setAttribute("aduitSwitchFlag", 1);
      }

      request.setAttribute("docId", docId);
      request.setAttribute("total", docCommentManager.getTotalCommnet(docId));
      request.setAttribute("channelId", channelId);

      return "path:showDocumentCommentList";
    } finally {
      tm.releasenolog();
    }
  }
  public NComentList getCommnetList(int docId, int n) throws Exception {
    // TODO Auto-generated method stub
    // throw new DocCommentManagerException("未实现!");

    Map<String, Object> paramMap = new HashMap<String, Object>();
    paramMap.put("docId", docId);
    paramMap.put("n", n + 1);
    TransactionManager tm = new TransactionManager();
    try {
      tm.begin(tm.RW_TRANSACTION);
      NComentList nComentList = new NComentList();
      nComentList.setComments(
          executor.queryListBean(DocComment.class, "getCommnetNList", paramMap));
      nComentList.setTotal(getTotalCommnet(docId));
      return nComentList;
    } catch (SQLException e) {
      throw e;

    } catch (Exception e) {
      throw e;
    } finally {
      tm.releasenolog();
    }
  }
예제 #9
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;
    }
  }