2013-08-07 26 views
5

üzerindeki anahtardan anahtar oluşturdu AÇIK DUPLICATE KEY deyimine sahip bir ekiniz varsa ve yinelenen bir anahtar varsa, çoğaltılan birincil anahtarı geri almak için herhangi bir yol var mı? veya kendi manuel sorgumu yapmak zorunda mıyım? CallableStatement sınıfından getGeneratedKeys() öğesinin yeni bir ek olarak gerçekte bitmeyeceğini söyleyebildiğim kadarıyla aslında yapılmadı.JDBC, yinelenen

EDIT Sorun olmasaydı üzgünüm ama PRIMARY KEY kaydını geri almak istiyorum.

Yani eğer aşağıdaki tabloyu (bahane sözdizimi, sadece serbest yazarak) var: Ben değeri olarak 'test' ekleyecek olsaydı

CREATE TABLE some_table(
    id int(11) unsigned NOT NULL AUTO_INCREMENT, 
    value varchar(500)NOT NULL, 
    count int(10) unsigned NOT NULL DEFAULT '0', 
    PRIMARY KEY (id), 
    UNIQUE KEY (value) 
); 

INSERT INTO some_table(value) ON DUPLICATE KEY UPDATE count = count + 1; 

, yeni rekor eklenebilir ve id getGeneratedKeys() tarafından döndürülebilir;

Tekrar 'test' eklemeyi denemem gerekiyorsa, anahtar zaten var ve bu nedenle sayım güncellenir. İstediğim, güncellenen satırın birincil anahtarı/kimliği. GetGeneratedKeys() 'den hiçbir sonuç elde edilmediğini, nerede oluşturulduğunu hiç görmediğimi görmeli miyim?

+4

Şüphesiz, yinelenen şeyi biliyorsunuz çünkü bu, daha önce çalıştırdığınız ifadede bulunuyor. –

+1

Bize, anahtarı kullanmaya başlamadan önce anahtarın ne olduğunu bilmediğiniz bir örnek verebilir misiniz? Olmayacak gibi görünmüyor ... –

+2

Üzgünüm - daha açık olmalıydım sanırım. Masanın birincil anahtarını geri istiyorum. –

cevap

0
ON DUPLICATE KEY UPDATE count = count + 1, id = LAST_INSERT_ID(id) 

Not: Bu, MySQL 5.5'ten itibaren gerekli olmamalıdır.

+0

Bu bana hiç yardımcı olmadı, ben hala kimliği geri almak için ekstra bir sorgu yapmak zorunda kalacaktı. Hepsini bir adımda yapmaya çalışıyorum. –

+0

getGeneratedKeys() 'ın artık aradığınız anahtarı döndüreceğine inanıyorum. – shmosel

+0

@MrZorn Denedin mi? – shmosel