# ResultSet-Problem



## Flyer (23. Sep 2004)

hab folgende Code:

```
OracleCallableStatement cstmt =	(OracleCallableStatement)conn.prepareCall
("begin ds_sloft.ds_sloft_display.retrieve_existing_dataset(pi_name=>?, pi_t_offerid=>?, pi_t_contractid=>?); end;");
cstmt.registerOutParameter(2, OracleTypes.ARRAY, "DS_SLOFT_NUM_TAB");
cstmt.registerOutParameter(3, OracleTypes.ARRAY, "DS_SLOFT_NUM_TAB");
cstmt.setString(1, name);

cstmt.execute(); 
conn.commit();
```

Wie bringe ich nun diese beiden Arrays in einen ResultSet? es sind int Array und wenn ich es wie bei objekten versuche:

```
ResultSet rset = (ResultSet)cstmt.getObject(2);
```
gibt es eine classcastexception!

Gruss Flyer2004
[/code]


----------



## nollario (23. Sep 2004)

du erwartest einen array? machst aber einen cast in ein resultset....

das passt nicht. musst also auch in ein array casten!


----------



## Flyer (23. Sep 2004)

hmm...wie meinst du das? kannst du es kurz in Code fassen!
wäre sehr nett!
sorry...verstehe ich nicht ganz sonst!

Gruss Flyer


----------



## Guest (23. Sep 2004)

Gib' einfach mal den Typen vom Ergebnis aus, dann weißt Du mehr.

```
Object o = cstmt.getObject(2);
if(o != null)
  System.out.println(o.getClass().getName());
```


----------



## Flyer (24. Sep 2004)

wenn ich das so eingebe motzt er ständig wegen ungültigem spaltenindex

java.sql.SQLException: Ungültiger Spaltenindex


----------



## nollario (24. Sep 2004)

das passt jetzt irgendwie nicht....

in dem letzten post heisst es dass der index nicht gefüllt ist, im ersten post gibt es eine classcasrexception.
versteh ich nicht ganz. entweder auf dem index gibt es einen rückgabeparameter oder nicht...


----------



## Flyer (24. Sep 2004)

habs jetzt mal so gemacht:

```
OracleCallableStatement cstmt =	(OracleCallableStatement)conn.prepareCall
("begin ds_sloft.ds_sloft_display.retrieve_existing_dataset(pi_name=>?, pi_t_offerid=>?, pi_t_contractid=>?); end;");
cstmt.setString(1, name);
cstmt.registerOutParameter(2, OracleTypes.ARRAY, "DS_SLOFT_NUM_TAB");
cstmt.registerOutParameter(3, OracleTypes.ARRAY, "DS_SLOFT_NUM_TAB");

cstmt.execute(); 
conn.commit();
			
ARRAY offers = cstmt.getARRAY(2);
ARRAY contracs = cstmt.getARRAY(3);
```

dies läuft ohne fehle...
wie schaffe ich es nun die Werte der ARRAY in je einen Vector zu speichern?

Gruss Flyer


----------



## nollario (24. Sep 2004)

geh ein einfach durch die werte des arrays per for schleife:


```
Vector v = new Vector();

for (int i = 0 ; i < ar.length ; i ++)
{
   v.add(ar[i]);
}
```


----------



## Flyer (24. Sep 2004)

das geht ja nicht weil es kein Array ist sondern ein ARRAY!
und das unterstütz ar_ nicht!_


----------



## Bleiglanz (24. Sep 2004)

RTFM java.sql.ARRAY

entweder aus dem Array ein Resultset machen und dann normal durchlaufen


> getResultSet
> 
> public ResultSet getResultSet()
> throws SQLException
> ...



oder gleich in ein "normales" Array



> getArray
> 
> public Object getArray()
> throws SQLException
> ...


----------



## Flyer (24. Sep 2004)

ich weiss nicht wieso...aber bei mir funzt es nicht...ich bekomme nie das was ich brauche!

@bleiglanz...könntest du das mal versuchen in code zu schreiben?
wäre sehr nett!

Danke Flyer


----------



## Flyer (24. Sep 2004)

und in ein normales Array krieg ich das auch nicht...


----------



## nollario (24. Sep 2004)

sorry... hab genau den gleichen code bei mir lokal auf sybase ausgeführt und es funzt... mit ARRAY (hatte ich zuerst übersehen, sorry) und den gleichen parameters... vielleicht solltest du die art und weise ändern, wie du die sp aufrufst:

http://java.sun.com/docs/books/tutorial/jdbc/basics/sql.html


```
CallableStatement cs = con.prepareCall("{call SHOW_SUPPLIERS}");
```

sollte es eigentlich nicht sein, aber möglich ist alles!


----------

