2017-02-12 1 views
-1

Ich habe eine benutzerdefinierte Tabelle in Oracle wie folgt erstellt und meine gespeicherte Prozedur die Liste zurück, wenn Test unabhängig Testdaten verwenden.Rücksprung-Liste <String> mit Spring jdbc von Oracle gespeicherte Prozedur mit benutzerdefinierten Objekt

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

Aber wenn ich diese gespeicherte Prozedur versuchen Frühjahr mit Java zu nennen, bin ich nicht in der Lage die List<String> zurückzukehren.

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

Wie können wir die benutzerdefinierte Liste von Oracle in Java zurückgeben?

Antwort

1

Hier ist die einfache Java-Methode, dies zu tun:

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(); 
    } 
    } 
} 
Verwandte Themen