4 votes

JAVA avec SQL : la valeur de retour de la commande d'insertion ?

J'ai une table d'auteurs : authorID, authorName. authorID est un pk avec auto incrément.

J'aimerais écrire une méthode en java qui récupère un nom d'utilisateur et l'ajoute à la table. Cependant, j'ai besoin de retourner l'identifiant de l'auteur. Y a-t-il un moyen de faire cela avec une seule instruction sql ?

par exemple si mon code a la commande :

stmt.executeUpdate("INSERT INTO authors " + "VALUES (, '"+ string.get(1) +"')");

dont string.get(1) est le nom de l'auteur.

Maintenant, si j'écris :

ResultSet rs =stmt.executeUpdate("INSERT INTO authors " + "VALUES (, '"+ string.get(1) +"')");

Il y a une erreur car rs est un jeu de résultats mais la valeur retournée est un int. Cet int est-il le pk de la ligne que j'ai insérée ?

8voto

Evgeniy Dorofeev Points 52031

Essayez

stmt.executeUpdate("INSERT INTO authors VALUES (, '"+ string.get(1) +"')", Statement.RETURN_GENERATED_KEYS);
ResultSet rs = stmt.getGeneratedKeys();
rs.next();
long pk = rs.getLong(1);

5voto

Subhrajyoti Majumder Points 20001

Passez Statement.RETURN_GENERATED_KEYS lors de la création de l'application PreparedStatement conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);

et PreparedStatement#getGeneratedKeys() renvoie la clé générée automatiquement après l'inertage.

5voto

PermGenError Points 26936

Afin d'obtenir le dernier identifiant inséré, regardez le code ci-dessous :

PreparedStatement stmnt = Conn.preparedStatement("INSERT INTO authors(col1) VALUES (?)", Statement. RETURN_GENERATED_KEYS );
stmnt.setString(col1val);
stmnt.executeUpdate();
ResultSet rs=stmnt.getGeneratedKeys();
if(rs.next()){
   System.out.println(rs.getInt(1));
}

0voto

Andrew Points 6844

Essayez :

INSERT INTO authors VALUES (...) returning authorID

Lorsque vous l'exécutez, faites-le avec executeQuery . Vous devriez recevoir un ResultSet avec une ligne et une colonne - ce sera l'ID.

0voto

BigMike Points 3443

Je ne sais pas si cela est pris en charge par JDBC (je ne l'ai pas utilisé depuis un moment), mais je suppose que vous pouvez essayer :

INSERT INTO TABLE_NAME (FIELD1, FIELD2) VALUES ('foo', 'bar') RETURNING FIELD3

via executeQuery() ou, si votre pilote jdbc ne prend pas en charge RETURNING écrire une fonction stockée simple.

Quel RDMBS utilisez-vous ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X