J'ai la variable TestingID
et une chaîne SQL comme suit dans mon code Java. la chaîne SQL sera utilisée plus tard pour prepareStatement
.
int TestingID;
String sqlInsert = "INSERT INTO TESTING VALUES(TESTING_SEQ.NEXTVAL, ?, ?)";
...
MethodA(TestingID); //passing TestingID to MethodA
Je dois obtenir la valeur de séquence suivante de l'enregistrement nouvellement inséré dans la variable TestingID
afin de pouvoir l'utiliser dans une autre méthode, comme indiqué ci-dessus.
En utilisant cette approche, vous devriez d'abord interroger la nouvelle valeur d'identité (je vois que vous utilisez des séquences) ,. Cela peut être fait en émettant un select.
// This example is for Oracle
String sqlIdentifier = "select TESTING_SEQ.NEXTVAL from dual";
PreparedStatement pst = conn.prepareStatement(sqlIdentifier);
synchronized( this ) {
ResultSet rs = pst.executeQuery();
if(rs.next())
long myId = rs.getLong(1);
Après cela, transmettez-le à la tâche readyStatement en tant qu'argument.
...
String sqlInsert = "INSERT INTO TESTING VALUES(?, ?, ?)";
PreparedStatement pst = conn.prepareStaetment(sqlInsert);
pst.setLong(1, myId);
...
À partir de ce moment, vous aurez toujours votre numéro de séquence.
Ce ne sont pas des exemples fonctionnels (pas de capture ou finalement, etc.), mais vous donneront une idée de la façon de le faire;)
Au printemps et dans la base de données Oracle, cela devrait fonctionner.
public Long getSequence() {
org.springframework.jdbc.core.JdbcTemplate jdbcTemplateObject = new JdbcTemplate(dataSource);
Long seq;
String sql = "select SEQ_XY.NEXTVAL from dual";
seq = jdbcTemplateObject.queryForObject(sql, new Object[] {}, Long.class);
return seq;
}
Dans Oracle, vous pouvez utiliser
long myId = rs.getLong("NEXTVAL");
Cela échouera pour HSQL . Vous pouvez modifier l'instruction SQL en ajoutant "en tant que NEXTVAL".
String sqlIdentifier = "select TESTING_SEQ.NEXTVAL as NEXTVAL from dual";
suivez les étapes ci-dessous:
1) create sequence in database by using the following query.
CREATE SEQUENCE sequence_name
[START WITH start_num]
[INCREMENT BY increment_num]
[ { MAXVALUE maximum_num | NOMAXVALUE } ]
[ { MINVALUE minimum_num | NOMINVALUE } ]
[ { CYCLE | NOCYCLE } ]
[ { CACHE cache_num | NOCACHE } ]
[ { ORDER | NOORDER } ];
exemple:
CREATE SEQUENCE customers_seq
START WITH 1000
INCREMENT BY 1
NOCACHE
NOCYCLE;
2) vérifiez si la séquence est créée avec succès ..__ en exécutant la commande:
select * from user_sequences;
recherchez le nom " customers_seq "
3) lancer la requête:
exemple de programme:
Statement stmt= connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT customers_seq.NEXTVAL FROM dual");
if ( rs!=null && rs.next() ) {
int cust_id = rs.getInt(1);
sysout(cust_id);
rs.close();
}
stmt.close();
con.close();