私は、構文的に正しいことがわかっている単純なクエリを実行しています(実行時に例外がキャッチされず、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 は、この結果セットをループして操作を実行するために使用されるメソッドに渡されます。これは、プログラムが行き詰まる場所です。何が問題なのか、またはどうすればそれを特定できるのかについてのアイデアはありますか?
ご協力いただきありがとうございます :)