4

私は、構文的に正しいことがわかっている単純なクエリを実行しています(実行時に例外がキャッチされず、ResultSet返されます)。

ただし、この結果セットをメソッドに渡してループし、いくつかの操作を実行すると、プログラムはこの結果セットの最初の行でループしてスタックします (無限ループ)。この問題が何であるかを本当に理解できません。クエリが適切である場合、ResultSet正しい結果が得られます (デバッグを介してクエリの内容を確認することはできませんが、正しいはずです)。何が問題なのですか?

これは、私がやっていることをよりよく理解するためのコードです。

ResultSet rs3 = null;

if (linked == J.LINKED_TO_ORG) {
    Vector<Integer> linkedTicketIds = new Vector<Integer>();

    while (rs.next()){
        // returns a set of id's for linked tickets
        Vector<Integer> linkedToTicket = Ticket.get_linked_OrgTickets(con, rs.getInt(Ticket.FLD_ID)); 

        if (!linkedToTicket.isEmpty()) {                                
            // if there are linked tickets in the result set, add them to vector
            // so they can be outputted alone
            linkedTicketIds.add(rs.getInt(Ticket.FLD_ID));
        }
    }

    if (!linkedTicketIds.isEmpty()){
        rs3 = select_linked_or_unlinked(con, linkedTicketIds, select_from);                 
    }
} 

メソッドではselect_linked_or_unlinked、次のクエリは、文字列バッファーとベクトルのlinkedTicketIdsを使用して構築され、示されているように良い結果を返します (読みやすさを向上させるためにフォーマットが追加されています):

SELECT Tick.ID
     , Tick.DESCRIPTION
     , Tick.TICKETTYPE
     , States.SHORT_NAME as state
     , Pri.DESCRIPTION   as priority
     , Owners.Login      as Owner
     , Submitters.Login  as Submitter
     , types.SHORT_NAME  as type
     , Tick.TITLE
     , Proj.Name         as Project
     , Proj.ID
     , Tick.RELEASE_NUM  as Release
     , Tick.SUBMIT_DATE
     , Tick.CUSTOMER
     , rownumber() OVER (ORDER BY Pri.ZORDER DESC)
                         as ROW_NEXT   
  FROM HOBTRACK.Tickets_Customers_View Tick
     , HOBTRACK.PROJECTS               Proj
     , HOBTRACK.PRIORITIES             Pri
     , HOBTRACK.STATES                 States
     , HOBTRACK.USERS                  Owners
     , HOBTRACK.USERS                  Submitters
     , HOBTRACK.TICKETTYPES            types
     , HOBTRACK.SECURITY_LEVEL         Security   
 WHERE Tick.ID IN (25031,25100,18123)

これは、クエリが実行されて返される方法です。

Statement stmt = con.createStatement(); // where con is the connection
rs = stmt.executeQuery(above_query); 

return rs;

while (rs.next())最後に、返された結果セット rs3 は、この結果セットをループして操作を実行するために使用されるメソッドに渡されます。これは、プログラムが行き詰まる場所です。何が問題なのか、またはどうすればそれを特定できるのかについてのアイデアはありますか?

ご協力いただきありがとうございます :)

4

0 に答える 0