JDBC PreparedStatement a navrat primary key
Karel Zacek
zacek na lightcomp.cz
Úterý Květen 26 11:21:43 CEST 2009
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.
>>
>>
>
>
>
Další informace o konferenci Konference