Statement.RETURN_GENERATED_KEYS muntazamidan foydalanib, oxirgi kiritilgan identifikatorni jadvaldan olib tashlashmi?

Mumkin bo'lgan ikki nusxadagi:    JDBC-ga qo'shish identifikatorini qanday olish mumkin?

Quyidagi xabarda, oxirgi kiritilgan C12 hisobga olish qiymatini qanday qilib olsam bo'ladi? Bu JavaDB qo'llanmasidan olingan, ammo ular ushbu so'nggi qo'shilgan qiymatni ushbu yozuvlar to'plamidan qanday olinishini aytib o'tmagan.

CREATE TABLE TABLE1 (C11 int, C12 int GENERATED ALWAYS AS IDENTITY)

Statement stmt = conn.createStatement(); 
stmt.execute(
    "INSERT INTO TABLE1 (C11) VALUES (1)",
    Statement.RETURN_GENERATED_KEYS);
ResultSet rs = stmt.getGeneratedKeys();
0

1 javoblar

Yaratilgan kalitlarni olish uchun quyidagi misol:

ResultSet rs = statement.getGeneratedKeys();
if (rs != null && rs.next()) {
    key = rs.getLong(1);
}

PS: Tegishli StackOverflow savol yetarli bo'lishi mumkin.

2
qo'shib qo'ydi
Adolatli! :-) bu eski odat.
qo'shib qo'ydi muallif Buhake Sindi, manba
Hech qachon null qaytaradi.
qo'shib qo'ydi muallif BalusC, manba
@Mark: javadocni buzadi: download.oracle.com/javase/6/docs/api/java/sql/… ResultSet da kalit yoki bo'sh. Yoki SQLException tashlanadi.
qo'shib qo'ydi muallif BalusC, manba
@BalusC: Faqatgina haydovchi to'g'ri bajarilgan bo'lsa, aks holda u bo'sh bo'lishi mumkin :) BTW: agar rs.getLong (1) haqiqiy kalitni JDBC drayverini qanday bajarilganiga bog'liq bo'lsa qaytaradi: ba'zi ma'lumotlar bazalari hammasi < i> sütunlarında RETURN_GENERATED_KEYS (masalan, PostgreSQL qiladi)
qo'shib qo'ydi muallif Mark Rotteveel, manba
Javadoc juda ko'p talab qila oladi, lekin haydovchi dasturini to'g'ri o'qimagan bo'lsa, u nullga qaytishi mumkin (bilaman, yaqinda Jaybirdda bunday xatoni aniqlagandim). Ayniqsa, shunga o'xshash getResultSet() usuli bo'sh bo'lishi mumkin.
qo'shib qo'ydi muallif Mark Rotteveel, manba