JAVA avec SQL: la valeur de retour de la commande d'insertion?
J'ai une table des auteurs : authorID, authorName.
authorID est un pk avec incrément automatique.
Je voudrais écrire une méthode en java qui reçoit un nom d'utilisateur et l'ajoute à la table. cependant j'ai besoin de retourner l'id de l'auteur. est-il un moyen de le faire avec 1 instruction sql?
par exemple si mon code a la commande:
stmt.executeUpdate("INSERT INTO authors " + "VALUES (, '"+ string.get(1) +"')");
quelle chaîne de caractères.(1) est le nom de l'auteur.
Maintenant, si j'écris:
ResultSet rs =stmt.executeUpdate("INSERT INTO authors " + "VALUES (, '"+ string.get(1) +"')");
il est dit d'erreur que le rs est resultset mais la valeur retournée est de type int. est-ce int le pk de la ligne que j'ai inséré?
- Non, le nombre de lignes qui ont été modifiés suivant votre requête. Une clé primaire n'est pas toujours un simple entier, vous le savez.
- int est le nombre de lignes affectées signifie que si vous avez exécuté un insert puis int sera de 1.
- d'où vient
string.get(1)
viennent? Gardez Little Bobby Tables dans votre esprit! - OKI thx, mais je ne sais toujours pas si je peux insérer la ligne et obtenir pk avec 1 sql de tresorerie?
- Vous pouvez. Le code que j'ai posté ci-dessous fonctionne.
- Il est extrêmement facile de découvrez par vous-même.
Vous devez vous connecter pour publier un commentaire.
essayer
Col Relevé.RETURN_GENERATED_KEYS lors de la création
PreparedStatement
conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
et
PreparedStatement#getGeneratedKeys()
retourne automatique de la clé générée après inerte.Afin d'obtenir le dernier id inséré regardez le code ci-dessous:
Je ne sais pas si c'est pris en charge par JDBC (ne l'avez pas utilisé depuis un certain temps), mais je suppose que vous pourriez essayer:
via executeQuery() ou, si votre pilote jdbc ne prend pas en charge
RETURNING
d'écrire une simple fonction stockée.Qui RDMBS utilisez-vous?
Essayer:
Lorsque vous lancez, faites-le avec
executeQuery
. Vous devriez obtenir unResultSet
avec une ligne et une colonne, il sera l'ID.authorID
avantreturning
.RecordSet
???