Ahoj

Vygenerovana id by melo jit ziskat pomoci metody PreparedStatement.getGeneratedKeys(), ale asi to nepujde pro celou davku.

karel

Martin Kuba wrote:
No, hodilo by se v dotazu uvést, o jakou databázi a jaký JDBC driver se jedná.
Z toho "returning id" soudím, že je to nejnovější PostgreSQL, protože
tohle je jeho specialitka, to není standardní SQL.

Podle popisu metody Statement.executeBatch(), který říká

Returns:
    an array of update counts containing one element for each command in the 
batch.

soudím, že vygenerované id se takhle získávat nedají. Musí se
v cyklu volat executeQuery(). Nebo, a to bude lepší,
získat ty id předem pomocí volání

select nextval('foo_id_seq')"

a nastavit je do dávky jako parametry, takže nebude nutné
z dávky nic vracet.

Makub

Dusan Zatkovsky napsal(a):
Ahoj.

Potrebujem do primitivnej tabulky, ktora ma id INTEGER PRIMARY KEY, vlozit tisicky zaznamov a ziskat s5 priradene id. Snazim sa na to pouzit PreparedStatement ( "insert into foo ( ... ) returning id as integer" ) a jeho batch funkcionalitu.

for ( ... ) {
        st.setString(..);
        st.addBatch();
}

Neviem vsak tie vygenerovane id ziskat, pretoze:

A.      st.executeBatch();                      // toto hodi SQL ex, ze nebol 
ocakavany result
        ResultSet rs = st.getGeneratedKeys();

B.      ResultSet rs = st.executeQuery()                // toto vrati len 1 
zaznam

Je vobec tato funkcionalita mozna pomocou batch, alebo musim v tom prvom cykle vzdy volat executeQuery() v kazdom cykle? Rad by som sa totiz vyhol zbytocnym RTT medzi klientom a databazou.

Dik.




Odpovedet emailem