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