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);
        // ...
    

    または 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. 複合インデックスはいつ使用する必要がありますか?

    2. SQLServerでの1対1の関係の定義

    3. 日常生活でデータベースをどのように使用するか

    4. SQL、テーブルへのデータの追加