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.