Атрыманне апошняга устаўленага пасведчанняў ID з табліцы, выкарыстоўваючы падпраграму Statement.RETURN_GENERATED_KEYS?

<�Р> <�моцны> Можна стварыць дублікат:
   Як атрымаць ўстаўкі ID ў JDBC? </р >

У наступным заяве, як я магу прынесці апошняе ўстаўленае значэнне ідэнтыфікатара C12? Гэта з інструкцыі JavaDB, але яны не згадалі пра тое, як атрымаць гэта апошняе ўстаўленае значэнне з гэтага набору запісаў.

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 адказы

Вось прыклад, каб атрымаць згенераваныя ключы:

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

PS: Звязаная StackOverflow пытанне можа хапіць.

2
дададзена
Даволі справядліва! :-) гэта старая звычка.
дададзена аўтар Buhake Sindi, крыніца
Ён ніколі не вяртае Null .
дададзена аўтар BalusC, крыніца
@Mark: гэта парушыла б Javadoc: download.oracle.com/javase/6/docs/api/java/sql/… The ResultSet мае альбо ключ ці пусты. Або SQLException будзе адкінутая.
дададзена аўтар BalusC, крыніца
@BalusC: Толькі калі кіроўца рэалізаваны правільна, у адваротным выпадку ён можа вярнуць нуль :) ДАРЭЧЫ: калі rs.getLong (1) вяртае фактычны ключ залежыць ад таго, як драйвер JDBC рэалізаваны: некаторыя базы дадзеных будуць вяртаць <�я> усе </я> слупкі пры выкарыстанні RETURN_GENERATED_KEYS (напрыклад, PostgreSQL робіць)
дададзена аўтар Mark Rotteveel, крыніца
Javadoc можа патрабаваць шмат, але калі рэалізатар кіроўца не прачытаў яго належным чынам, яна можа вяртаць нуль (я ведаю, таму што ў апошні час фіксуецца менавіта такі баг у JayBird). Тым больш, што метад аналагічна getResultSet() <�я> можа вяртанне нуля.
дададзена аўтар Mark Rotteveel, крыніца