📄 abstractbatcher.java
字号:
log.warn("Could not close a JDBC prepared statement", sqle); } batchUpdate=null; batchUpdateSQL=null; Iterator iter = resultSetsToClose.iterator(); while ( iter.hasNext() ) { try { logCloseResults(); ( (ResultSet) iter.next() ).close(); } catch (SQLException e) { // no big deal log.warn("Could not close a JDBC result set", e); } catch (Throwable e) { // sybase driver (jConnect) throwing NPE here in certain cases log.warn("Could not close a JDBC result set", e); } } resultSetsToClose.clear(); iter = statementsToClose.iterator(); while ( iter.hasNext() ) { try { closeQueryStatement( (PreparedStatement) iter.next() ); } catch (SQLException e) { // no big deal log.warn("Could not close a JDBC statement", e); } } statementsToClose.clear(); } finally { releasing = false; } } protected abstract void doExecuteBatch(PreparedStatement ps) throws SQLException, HibernateException; private String preparedStatementCountsToString() { return " (open PreparedStatements: " + openPreparedStatementCount + ", globally: " + globalOpenPreparedStatementCount + ")"; } private String resultSetCountsToString() { return " (open ResultSets: " + openResultSetCount + ", globally: " + globalOpenResultSetCount + ")"; } private void logOpenPreparedStatement() { if ( log.isDebugEnabled() ) { log.debug( "about to open PreparedStatement" + preparedStatementCountsToString() ); openPreparedStatementCount++; globalOpenPreparedStatementCount++; } } private void logClosePreparedStatement() { if ( log.isDebugEnabled() ) { log.debug( "about to close PreparedStatement" + preparedStatementCountsToString() ); openPreparedStatementCount--; globalOpenPreparedStatementCount--; } } private void logOpenResults() { if ( log.isDebugEnabled() ) { log.debug( "about to open ResultSet" + resultSetCountsToString() ); openResultSetCount++; globalOpenResultSetCount++; } } private void logCloseResults() { if ( log.isDebugEnabled() ) { log.debug( "about to close ResultSet" + resultSetCountsToString() ); openResultSetCount--; globalOpenResultSetCount--; } } protected SessionFactoryImplementor getFactory() { return factory; } private void log(String sql) { factory.getSettings().getSqlStatementLogger().logStatement( sql, FormatStyle.BASIC ); } private PreparedStatement getPreparedStatement( final Connection conn, final String sql, final boolean scrollable, final ScrollMode scrollMode) throws SQLException { return getPreparedStatement( conn, sql, scrollable, false, null, scrollMode, false ); } private CallableStatement getCallableStatement( final Connection conn, String sql, boolean scrollable) throws SQLException { if ( scrollable && !factory.getSettings().isScrollableResultSetsEnabled() ) { throw new AssertionFailure("scrollable result sets are not enabled"); } sql = getSQL( sql ); log( sql ); log.trace("preparing callable statement"); if ( scrollable ) { return conn.prepareCall( sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY ); } else { return conn.prepareCall( sql ); } } private String getSQL(String sql) { sql = interceptor.onPrepareStatement( sql ); if ( sql==null || sql.length() == 0 ) { throw new AssertionFailure( "Interceptor.onPrepareStatement() returned null or empty string." ); } return sql; } private PreparedStatement getPreparedStatement( final Connection conn, String sql, boolean scrollable, final boolean useGetGeneratedKeys, final String[] namedGeneratedKeys, final ScrollMode scrollMode, final boolean callable) throws SQLException { if ( scrollable && !factory.getSettings().isScrollableResultSetsEnabled() ) { throw new AssertionFailure("scrollable result sets are not enabled"); } if ( useGetGeneratedKeys && !factory.getSettings().isGetGeneratedKeysEnabled() ) { throw new AssertionFailure("getGeneratedKeys() support is not enabled"); } sql = getSQL( sql ); log( sql ); log.trace( "preparing statement" ); PreparedStatement result; if ( scrollable ) { if ( callable ) { result = conn.prepareCall( sql, scrollMode.toResultSetType(), ResultSet.CONCUR_READ_ONLY ); } else { result = conn.prepareStatement( sql, scrollMode.toResultSetType(), ResultSet.CONCUR_READ_ONLY ); } } else if ( useGetGeneratedKeys ) { result = conn.prepareStatement( sql, PreparedStatement.RETURN_GENERATED_KEYS ); } else if ( namedGeneratedKeys != null ) { result = conn.prepareStatement( sql, namedGeneratedKeys ); } else { if ( callable ) { result = conn.prepareCall( sql ); } else { result = conn.prepareStatement( sql ); } } setTimeout( result ); if ( factory.getStatistics().isStatisticsEnabled() ) { factory.getStatisticsImplementor().prepareStatement(); } return result; } private void setTimeout(PreparedStatement result) throws SQLException { if ( isTransactionTimeoutSet ) { int timeout = (int) ( transactionTimeout - ( System.currentTimeMillis() / 1000 ) ); if (timeout<=0) { throw new TransactionException("transaction timeout expired"); } else { result.setQueryTimeout(timeout); } } } private void closePreparedStatement(PreparedStatement ps) throws SQLException { try { log.trace("closing statement"); ps.close(); if ( factory.getStatistics().isStatisticsEnabled() ) { factory.getStatisticsImplementor().closeStatement(); } } finally { if ( !releasing ) { // If we are in the process of releasing, no sense // checking for aggressive-release possibility. connectionManager.afterStatement(); } } } private void setStatementFetchSize(PreparedStatement statement) throws SQLException { Integer statementFetchSize = factory.getSettings().getJdbcFetchSize(); if ( statementFetchSize!=null ) { statement.setFetchSize( statementFetchSize.intValue() ); } } public Connection openConnection() throws HibernateException { log.debug("opening JDBC connection"); try { return factory.getConnectionProvider().getConnection(); } catch (SQLException sqle) { throw JDBCExceptionHelper.convert( factory.getSQLExceptionConverter(), sqle, "Cannot open connection" ); } } public void closeConnection(Connection conn) throws HibernateException { if ( log.isDebugEnabled() ) { log.debug( "closing JDBC connection" + preparedStatementCountsToString() + resultSetCountsToString() ); } try { if ( !conn.isClosed() ) { JDBCExceptionReporter.logAndClearWarnings(conn); } factory.getConnectionProvider().closeConnection(conn); } catch (SQLException sqle) { throw JDBCExceptionHelper.convert( factory.getSQLExceptionConverter(), sqle, "Cannot close connection" ); } } public void cancelLastQuery() throws HibernateException { try { if (lastQuery!=null) lastQuery.cancel(); } catch (SQLException sqle) { throw JDBCExceptionHelper.convert( factory.getSQLExceptionConverter(), sqle, "Cannot cancel query" ); } } public boolean hasOpenResources() { return resultSetsToClose.size() > 0 || statementsToClose.size() > 0; } public String openResourceStatsAsString() { return preparedStatementCountsToString() + resultSetCountsToString(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -