• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

Any replacement for ArrayDescriptor?

 
Greenhorn
Posts: 10
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi, I am using stored procedure which received the java array I passed like this:

public class ArrayDemo

public static void passArray() throws SQLException
{
Connection conn =
new OracleDriver().defaultConnection();

int intArray[] = { 1,2,3,4,5,6 };

ArrayDescriptor descriptor =
ArrayDescriptor.createDescriptor( "NUM_ARRAY", conn );

ARRAY array_to_pass =
new ARRAY( descriptor, conn, intArray );
OraclePreparedStatement ps =
(OraclePreparedStatement)conn.prepareStatement
( "begin give_me_an_array(:x); end;" );
ps.setARRAY( 1, array_to_pass );
ps.execute();
}
Somehow, my company does not allow us to use any oracle extension on JDBC, and we only can use API that used in standard JDBC. But in standard JDBC, I can not find a equivalent object as oracle's ArrayDescriptor, and there is not constructor for java.sql.Array, thus I do not know how to construct an Array object in Java side.

What should I do then? Is it impossible for me to avoid oracle's extention?

Thanks
Wogong
 
author & internet detective
Posts: 41860
908
Eclipse IDE VI Editor Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
"xingwogong",
We're pleased to have you here with us in the JDBC forum, but there are a few rules that need to be followed, and one is that proper names are required. Please take a look at the JavaRanch Naming Policy and adjust your display name to match it.

In particular, your display name must be a first and a last name separated by a space character, and must not be obviously fictitious.
 
Jeanne Boyarsky
author & internet detective
Posts: 41860
908
Eclipse IDE VI Editor Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Xing,
I think databases handle arrays in different ways. Just like BLOB/CLOB, there is no vendor netural class. In the case of BLOB/CLOB, there are alternative ways of setting the value (like a byte array or binary stream.)

The lack of response to this questions also indicates that nobody has done this for arrays. From the JavaDoc, it looks like the implementation of Array is very database specific.
 
Greenhorn
Posts: 15
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Xing,

I am facing same problem as you ,


could you please let me know if you have got answer for mentioned problem ?

Thanks ,
Devendra
 
Ranch Hand
Posts: 1143
1
Eclipse IDE Oracle Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Wogong,
You said:


there is not constructor for java.sql.Array


"java.sql.Array" is an interface, not a class, and therefore has no constructor.
Obviously every JDBC driver is going to implement this interface differently.
Hence, as Jeanne said, there is no database-independent way to pass an array to a stored procedure.
As far as I can see, you simply need to find a different way of passing an array of values to your stored procedure.

Good Luck,
Avi.
 
Devendra Thomare
Greenhorn
Posts: 15
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Thanks Avi ....

I tried another way I created one custom class which implements java.sql.SQLData .

In this class we will have one property e.g (String[] which we wanted to give as array)

and then create instance of this class and set this object as cstmt.setObject()

but it didnt work ...


public class UserApplicationSQL implements SQLData {

/** Creates a new instance of UserApplicationSQL */

private static final String typeName="ECPIXDBA.TBL_PARA";

public String[] array;
public UserApplicationSQL(String[] array) {
this.array=array;
System.out.println("in construcotr"+this.array.length);
}

public String getSQLTypeName() throws SQLException {
return typeName;
}

public void readSQL(SQLInput stream, String typeName) throws SQLException {

}

public void writeSQL(SQLOutput stream) throws SQLException {

for(int i=0;i<array.length;i++){
stream.writeString(array[i]);
}

}

}

AND in my caller class
UserApplicationSQL usa=new UserApplicationSQL ()

and passing this object to setObject

please let me know if i am doing any mistake in this

any way now i had to split my stored procedure and i am calling my query by looping values in array ....
 
reply
    Bookmark Topic Watch Topic
  • New Topic