Oracle
 sql >> база данни >  >> RDS >> Oracle

PLSQL JDBC:Как да получа ID на последния ред?

Обикновено бихте използвали Statement#getGeneratedKeys() за това (вижте и този отговор за пример), но това до момента (все още) не се поддържа от драйвера на Oracle JDBC.

Най-добрият ви залог е да и двете използвайте CallableStatement с RETURNING клауза:

String sql = "BEGIN INSERT INTO mytable(id, content) VALUES (seq_mytable.NEXTVAL(), ?) RETURNING id INTO ?; END;";

Connection connection = null;
CallableStatement statement = null;

try {
    connection = database.getConnection();
    statement = connection.prepareCall(sql);
    statement.setString(1, "test");
    statement.registerOutParameter(2, Types.NUMERIC);
    statement.execute();
    int id = statement.getInt(2);
    // ...

Или fire SELECT sequencename.CURRVAL след INSERT в същата транзакция:

String sql_insert = "INSERT INTO mytable(content) VALUES (?)";
String sql_currval = "SELECT seq_mytable.CURRVAL FROM dual";

Connection connection = null;
PreparedStatement statement = null;
Statement currvalStatement = null;
ResultSet currvalResultSet = null;

try {
    connection = database.getConnection();
    connection.setAutoCommit(false);
    statement = connection.prepareStatement(sql_insert);
    statement.setString(1, "test");
    statement.executeUpdate();
    currvalStatement = connection.createStatement();
    currvalResultSet = currvalStatement.executeQuery(sql_currval);
    if (currvalResultSet.next()) {
        int id = currvalResultSet.getInt(1);
    }
    connection.commit();
    // ...


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Намерете максималните последователни години за всеки идентификатор в таблица (Oracle SQL)

  2. Oracle PL/SQL:как да получите трасето на стека, името на пакета и името на процедурата

  3. HEXTORAW() Функция в Oracle

  4. Oracle SQL Developer:Неуспешен тест – Неуспешен тест:Мрежовият адаптер не може да установи връзката?

  5. Преобразуване на ограничен низ в редове в oracle