2010-11-30 19 views
0

J'insère des valeurs dans une base de données en utilisant un PreparedStatement, mais il semble que je ne puisse pas récupérer le dernier identifiant d'insertion dans ce cas.Java, PreparedStatement, TransactSQL (MS SQL), dernier identifiant d'insertion

J'essaie d'utiliser la même instruction que j'utilise pour les instructions (ci-dessous) mais cela ne marche pas. Il est dit que .executeQuery() ne peut pas prendre d'arguments dans ce cas.

En fait, je n'ai pas vraiment besoin du dernier identifiant d'insertion, le nombre de lignes affectées le fera, mais comment puis-je obtenir cela? Je pensais que la méthode .executeUpdate() de PreparedStatement retournerait le nombre de lignes affectées, mais apparemment, ce n'est pas le cas.

Voici la méthode.

public static int getLastInsertId(Statement stmt) throws SQLException { 
    String sql = "SELECT SCOPE_IDENTITY() AS id"; 

    ResultSet rs = stmt.executeQuery(sql); 
    int id = 0; 
    while (rs.next()) { 
    id = rs.getInt("id"); 
    } 
    return id; 
} 

Merci d'avance.

+1

Vous ** jamais ** fermer le ResultSet? –

+0

Que voyez-vous lorsque vous exécutez cette requête à partir de la console ou de tout frontal? –

+0

Merci de l'avoir signalé. Je le fais habituellement, je le promets :) – Ibolit

Répondre

0

méthode executeUpdate d'un PreparedStatement ne renvoie en effet le nombre de lignes affectées ...

+0

Apparemment, c'est le cas. J'ai été un peu rebuté par le libellé de leur javadoc, et j'ai un peu confondu les paramètres de mon état préparé (ils sont nombreux). Merci, et désolé pour mon erreur. – Ibolit