2017-02-12 1 views
-1

J'ai créé une table personnalisée dans Oracle comme ci-dessous et ma procédure stockée renvoyant la liste lors du test indépendamment en utilisant des données de test.Retour liste <String> en utilisant Spring jdbc à partir de la procédure stockée Oracle ayant un objet personnalisé

create or replace TYPE NAMELIST AS TABLE OF VARCHAR2(20); 

Mais quand je suis en train d'appeler cette procédure stockée à l'aide du printemps Java, je ne suis pas en mesure de retourner la List<String>.

declareParameter(new SqlOutParameter('l_out', OracleTypes.ARRAY, 'NAMELIST', 
       new SqlReturnArray())); 

Comment pouvons-nous retourner la liste personnalisée d'Oracle dans Java?

Répondre

1

Voici la méthode simple Java de faire ceci:

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 

import oracle.jdbc.OracleCallableStatement; 

public class TestDatabaseArray 
{ 
    public static void main(final String[] args) 
    { 
    try{ 
     Class.forName("oracle.jdbc.OracleDriver"); 

     Connection con = DriverManager.getConnection(
      "jdbc:oracle:thin:@localhost:1521:orcl", 
      "username", 
      "password" 
     ); 

     OracleCallableStatement st 
     =(OracleCallableStatement) con.prepareCall("{ call get_names(:out_array) }"); 

     st.registerOutParameter(1, java.sql.Types.ARRAY, "NAMELIST"); 

     st.execute(); 

     String[] names = (String[]) st.getARRAY(1).getArray(); 

     for (final String name : names) 
     System.out.println(name); 
    } 
    catch (ClassNotFoundException | SQLException ex) 
    { 
     System.out.println(ex.getMessage()); 
     ex.printStackTrace(); 
    } 
    } 
}