Das hängt nun ganz von der AS/400 ab.
Wie viele Daten enthält die Datei?
Gibt es einen Index?
Bei solchen Problemen hilft eher selten ein lokaler Trace sondern ein STRDBG im AS/400-Job.
Dieser wird durch eine Trace-Angabe in der Java-Connection gestartet.
Anschließend kannst du per "WRKOBJLCK USER *USRPRF" (User = dein Anmeldeuser) den QZDASOINIT-Job feststellen und die dortigen Nachrichte bzgl. des langsamen SQL's untersuchen und ggf. darauf reagieren.
Dies ist die 1. Variante.

Nun bin ich nicht tief genug in Java um zu wissen, ob es hier die Differenz zwischen Client- und Servercursor gibt.
Ggf. wird beim Execute ein Resultset gebildet, dass alle Daten des Selects beinhaltet. D.h., dass der Execute erst zurückkommt, wenn alles geladen ist.
Auch dies sieht man ggf. im AS/400-Job, da durch blocken dort immer steht "XXX Zeilen von Cursor abgerufen" (o.ä.).
Dies kann natürlich auch dauern.