Obtenir jeu de résultats à partir instruction insert
j'ai le code ci-dessous, où je suis d'insérer des enregistrements dans une table. Lorsque j'essaie d'obtenir le jeu de résultats, il renvoie la valeur null. Comment obtenir la dernière ajouté la ligne dans un jeu de résultats?
String sql1 = "INSERT INTO [xxxx].[dbo].[xxxxxx](WORKFLOW_SEQ_NBR," +
" WORKFLOW_LOG_TYPE_CODE, WORKFLOW_STATUS_CODE, DISP_CODE, DISP_USER, DISP_COMMENT, DISP_TITLE, DISP_TS)" +
"VALUES(?,?,?,?,?,?,?,?)";
PreparedStatement pst = connect.prepareStatement(sql1);
pst.setString(1, ...);
pst.setString(2, ...);
...
...
...
pst.executeUpdate();
ResultSet rstest = pst.executeQuery();
// ResultSet rstest = pst.getResultSet();
EDIT: Résolu
ajouté méthode suivante pour passer à la dernière ajouté la ligne
st.execute("Select * from [xxxx].[dbo].[xxxxxxxxx]");
ResultSet rstest = st.getResultSet();
rstest.afterLast();
GETLASTINSERTED:
while(rstest.previous()){
System.out.println(rstest.getObject(1));
break GETLASTINSERTED;//to read only the last row
}
- Quels résultats attendez-vous d'une instruction insert?
- Qu'attendez-vous? Vous devez exécuter une requête de sélection pour obtenir des résultats.
- Vous ne pouvez pas récupérer le résultat que vous attendiez de
INSERT, UPDATE & DELETE (via executeUpdate())
opérations, mais peut le faire à partir deSELECT(FIND) (vis executeQuery())
op. - J'ai besoin de la ligne qui a été inséré à l'aide de la pst. Comment puis-je déplacer le curseur de la resulset à cette ligne?
Vous devez vous connecter pour publier un commentaire.
Lors de l'utilisation d'une instruction SQL comme
INSERT
,UPDATE
ouDELETE
avec unPreparedStatement
, vous devez utiliserexecuteUpdate
, qui sera de retour le nombre de affeted lignes. Dans ce cas, il n'est tout simplement pasResultSet
produite par l'opération sql et ainsi de remettre executeQuery va jeter unSQLException
.Si vous avez réellement besoin d'un
ResultSet
vous devez faire une autre déclaration avec unSELECT
opération SQL.Voir la javadoc de PreparedStatement#executeQuery et PreparedStatement#executeUpdate
Connexion#prepareStatement() - Crée un objet PreparedStatement pour l'envoi paramétrable SQL pour la base de données.
qui signifie
connect.prepareStatement(sql1);
créé l'objet PreparedStatement à l'aide de votre requête d'insertion.et quand vous n'avez
pst.executeUpdate();
il sera de retour le nombre de lignes de SQL Langage de Manipulation de Données (DML) ou 0 pour les instructions SQL qui renvoie rienMaintenant, si vous voulez de nouveau pour aller chercher les données insérées vous avez besoin pour créer un nouvel objet PreparedStatement avec une requête Select.
puis cela vous donnera de l'objet ResultSet qui contient les données produites par la requête
Semble que c'est une vieille question, mais je suis à la recherche d'une solution similaire, peut-être que les gens auront toujours besoin de cela.
Si vous êtes en train de faire une instruction insert, vous pouvez utiliser la Connexion.PreparedStatement(String, String[]) constructeur, et affecter des personnes à un jeu de résultats avec le ps.getGeneratedKeys().
Il ressemblerait à quelque chose comme ceci: