He TestingID variable y una cadena sql de la siguiente manera en mi código de java. la cadena sql se utilizarán posteriormente para prepareStatement.

 int TestingID; 

 String sqlInsert = "INSERT INTO TESTING VALUES(TESTING_SEQ.NEXTVAL, ?, ?)";  
 ...  

 MethodA(TestingID);     //passing TestingID to MethodA

Necesito para obtener el siguiente valor de secuencia de registro recién insertado en el TestingID así que lo puedo usar en otro método, como se muestra arriba.

OriginalEl autor Z.V | 2013-08-01

4 Comentarios

  1. 27

    Con ese enfoque, usted debe consultar primero para el nuevo valor de identidad (veo que estás usando secuencias). Esto puede hacerse mediante la emisión de 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);

    Después de eso, se pasa a las preparedStatement como un argumento.

    ...
    String sqlInsert = "INSERT INTO TESTING VALUES(?, ?, ?)";
    PreparedStatement pst = conn.prepareStaetment(sqlInsert);
    pst.setLong(1, myId);
    ...

    A partir de ese punto, usted siempre tendrá su número de secuencia.

    Estos no son funcionales ejemplos (no coger o finalmente, etc), pero le dará una idea de cómo hacerlo 😉

    Probablemente, hay una manera de evitar el extra select mediante el returning into sintaxis.
    Por supuesto, pero me estoy dando un genérico apporoach utilizando oracle sintaxis de un ejemplo práctico. El RETORNO A no trabajo para SQL Server, puesto que se debe utilizar un procedimiento almacenado para hacer la misma operación, y un CallableStatement para registrar el parámetro out. Para DB2, puede realizar sólo una SELECT para SYSIBM.SYSDUMMY1, y así sucesivamente…

    OriginalEl autor Cristian Meneses

  2. 2

    En primavera y Oracle de base de datos, esto debería funcionar.

    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;
    }

    OriginalEl autor Laszlo Lugosi

  3. 0

    En Oracle puede utilizar

    long myId = rs.getLong("NEXTVAL");

    Esto se producirá por HSQL.
    Usted puede modificar la instrucción sql, mediante la adición de «como NEXTVAL».

    String sqlIdentifier = "select TESTING_SEQ.NEXTVAL as NEXTVAL from dual";

    OriginalEl autor Walter A

  4. 0

    seguir los siguientes pasos:

                     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 } ];

    ejemplo:

    CREATE SEQUENCE customers_seq
     START WITH     1000
     INCREMENT BY   1
     NOCACHE
     NOCYCLE;

    2) comprobar si la secuencia se ha creado correctamente.
    mediante la ejecución del comando:

                           select * from user_sequences;

    comprobar el nombre «customers_seq«

    3) ejecutar la consulta:

    programa de ejemplo:

    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();

    OriginalEl autor Naresh Salikanti

Dejar respuesta

Please enter your comment!
Please enter your name here