2010-08-26 6 views
1

Lorsque j'exécute la requête SQL SELECT * FROM TABLE (TEST.getDevices()) dans sqldeveloper J'ai environ 200 lignes, mais lorsque je tente de l'exécuter en java:ResultSet vide après l'exécution PreparedStatement

//cut here 
String query = "SELECT * FROM TABLE (TEST.getDevices())"; 
PreparedStatement stmt = null; 
ResultSet rset = null; 
try { 
    stmt = oracleConnection.prepareStatement(query); 
    rset = stmt.executeQuery(); 
    rset.next(); 
    System.out.println(rset.getInt(1)); 
//cut here 

Je reçois ResultSet vide et ainsi de suite l'exception Est lancé. J'ai essayé requête SELECT Count(*) a FROM TABLE (TEST.getDevices()) En résultat sqldeveloper est de 200, dans l'application Java est 0.

Ce qui pourrait être une raison qui se ResultSet vide dans ma app?

+0

Autorisations/droits de l'application par rapport à la base de données? – Tobiasopdenbrouw

Répondre

0

Vérifiez la connexion DB.

+0

Oui, mais ça allait. Problème résolu - c'était une erreur dans la base de données, l'application était en désaccord dans le contexte de l'utilisateur qui n'avait pas le droit de le lire. – Zygmunt

0

Je suppose que TEST.getDevices() retourne TYPE "TABLE OF" ou getDevices est PIPELINED FUNCTION? Si cela est vrai, vous pouvez essayer cette astuce:

CREATE VIEW VIEW_DEVICES AS SELECT * FROM TABLE(TEST.getDevices()); 

Que ce shoud fonctionne de Java et sqldeveloper:

DESC VIEW_DEVICES; 

ou select

SELECT * FROM VIEW_DEVICES; 

Vous pouvez vous remplacer requête à:

String query = "SELECT * FROM VIEW_DEVICES"; 

Ou vous une tentative de recherche dans google quelque chose comme "comment cartographier varray en Java d'oracle".