private BandwidthInfo findChannelBandwidthByFunctionAndArray(final List<String> channelIds, final String startTime, final String endTime, final List<String> arrayIds, final String functionName, final String arrayName) { BandwidthInfo bandwidth = new BandwidthInfo(); Connection conn = null; Connection connection = null; ResultSet rs1 = null; try { Date splitStart = new Date(); bandwidth.initBandwidthArray(startTime, endTime); C3P0NativeJdbcExtractor nativeJdbcExtractor = new C3P0NativeJdbcExtractor(); conn = logDataSource.getConnection(); // 必须使用Oracle的连接,才能创建ArrayDescriptor connection = nativeJdbcExtractor.getNativeConnection(conn); CallableStatement callableStatement = connection.prepareCall("{? = call " + functionName + "(?,?,?,?)}"); final List<CHAR> cIDs = createCHARArray(channelIds); final List<CHAR> aIDs = this.createCHARArray(arrayIds); callableStatement.registerOutParameter(1, OracleTypes.CURSOR); ARRAY channelIdArray = createArray(Constants.CHANNELIDARRAY_SQL_TYPE, cIDs, connection); callableStatement.setArray(2, channelIdArray); callableStatement.setString(3, startTime); callableStatement.setString(4, endTime); ARRAY nodeIdArray = createArray(arrayName, aIDs, connection); callableStatement.setArray(5, nodeIdArray); callableStatement.execute(); rs1 = (ResultSet) callableStatement.getObject(1); while(rs1.next()){ Timestamp d = rs1.getTimestamp(1); Date date = new Date(d.getTime()); Long outData = rs1.getLong(2); Long inData = rs1.getLong(3); // System.out.println(date+"-----"+outData+"----"+inData); bandwidth.setOutBandwidth(date, outData); bandwidth.setInBandwidth(date, inData); bandwidth.setInOutBandwidth(date, outData + inData); } OracleCachedRowSet rs = new OracleCachedRowSet(); // CachedRowSetImpl rs=new CachedRowSetImpl(); rs.populate(rs1); rs1.close(); callableStatement.close(); connection.close(); conn.close(); // while (rs.next()) { // Timestamp d = rs.getTimestamp(1); // String dd=rs.getString(1); // // Date date = new Date(d.getTime()); // Long outData = rs.getLong(2); // Long inData = rs.getLong(3); // bandwidth.setOutBandwidth(date, outData); // bandwidth.setInBandwidth(date, inData); // bandwidth.setInOutBandwidth(date, outData + inData); // } rs.close(); Date splitEnd = new Date(); logger.info("BillingServiceManagerImpl.log query cost " + (splitEnd.getTime() - splitStart.getTime()) / 1000 + "S"); } catch (SQLException e) { if (connection != null) try { connection.rollback(); connection.close(); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } if (rs1 != null) try { rs1.close(); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } if (conn != null) try { conn.rollback(); conn.close(); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } e.printStackTrace(); logger.error("DB Error", e); throw new DataAccessResourceFailureException(e.getMessage()); } return bandwidth; }