Javaの流不能复用ストリームは、すでに時に操作またはクローズされています

シーン

// 防止SQL注入 
    ストリームの<string> idList = accDocIDList.stream()マップ((X) - > 
                { 
                場合(x.matches( "[^-ZA-Z0-9-]" ))
                { 
                    // スロー新しいBalanceException( "XXX-XXX"、 "笑"); 
                    スロー 新しいのRuntimeException( "非法凭证IDを" ); 
                } 
                 を返す String.Formatの( " '%1 $ s'が" 、Xを); 
            }); 

        パラメータ = 新しいIDbParameter [] 
                { 
                        bqlExecuter.makeInParam( "FUNCID" 、FUNCID)"ユーザID" ユーザID)、
                        bqlExecuter.makeInParam( "accOrgID" 、accOrgID)、
                        bqlExecuter.makeInParam( "AccLedgerID" 元帳)、
                        bqlExecuter.makeInParam( "年" 、年)、
                        bqlExecuter.makeInParam( "フラグ"、「1 " )、
                        bqlExecuter.makeInParam( "accPeriodID" 、accPeriodID)
                }。
        // 分页
        int型のpageSize = 900 ;
        int型 PAGENUM = 0 ;
        accDocIDList.size())
        { 
            リストの<string>一覧= IDLIST .SKIP(PAGENUM).limit(pageSizeを).collect(Collectors.toList()); //ここストリームを再使用して第2ストリームが与えられたサイクル閉じた時に操作したり、既にされて  
            文字列idsql = BQL + "とa.idに(" + String.Join( ""、リスト)+ ")" ; 
            VAR RET = bqlExecuter.executeBqlStatement(idsql、refEntityIDs、パラメータ); 
            PAGENUM ++ ; 
        }

回避策サプライヤ

// 防止SQL注入
        サプライヤー<ストリームの<string >> idList =() - >。accDocIDList.stream()はマップ((X) - > 
                { 
                場合(x.matches( "[^-ZA-Z0-9-] " ))
                { 
                    // 新しいBalanceException(スロー"笑「、 "XXX-XXX")を、
                    スロー 新規のRuntimeExceptionを( "非法凭证ID" ); 
                } 
                 戻り String.Formatのを( " '%1 $ S'" 、X)。
            }); 

        パラメータ = 新しいIDbParameter [] 
                { 
                        bqlExecuter.makeInParam( "FUNCID" 、FUNCID)"ユーザID" ユーザID)、
                        bqlExecuter.makeInParam( "accOrgID" 、accOrgID)、
                        bqlExecuter.makeInParam( "AccLedgerID" 元帳)、
                        bqlExecuter.makeInParam( "年" 、年)、
                        bqlExecuter.makeInParam( "フラグ"、「1 " )、
                        bqlExecuter.makeInParam( "accPeriodID" 、accPeriodID)
                }。
        // 分页
        int型のpageSize = 900 ;
        int型 PAGENUM = 0 ;
        accDocIDList.size())
        { 
            リストの<string>リスト= idList.get() .SKIP(PAGENUM).limit(pageSizeを).collect(Collectors.toList())。
            ストリングidsql = BQL + "とでA.ID(" + String.join( ""、リスト)+ ")" 
            VAR RET = bqlExecuter.executeBqlStatement(idsql、refEntityIDs、パラメータ)
            PAGENUM ++ ; 
        }

おすすめ

転載: www.cnblogs.com/wolbo/p/12112203.html