Java JDBC Получить идентификатор после вставки - PullRequest
3 голосов
/ 10 августа 2010

Я использую триггеры для установки значений столбцов PK всех таблиц, поэтому я не делаю никаких операций с идентификаторами в Java, но мне нужен идентификатор после вставки.

Как я могу получить ID?

stat.execute("INSERT INTO TPROJECT_PROCESS_GROUP(NPROJECT_ID,VDESCRIPTION) " +
                "VALUES(" +
                "'" + projectID + "'," +
                "'" + description + "'" +
                "");

Редактировать: Привет еще раз, я прочитал вопрос, теперь я получаю исключение, например «неподдерживаемая операция» (я перевел с моего родного языка, точная английская форма может отличаться). я думаю, что это о поддержке оракула для GetGeneratedKeys? Вы знаете что-нибудь об этом?

Решение. Как упоминалось в книге о вызываемых заявлениях, этот оператор может использоваться для выполнения хранимых процедур и функций. В отличие от PreparedStatement, большинство баз данных не выполняют никакой подготовки к вызову, потому что это такая простая команда. Экземпляры CallableStatement могут использоваться для возврата объекта, возвращенного хранимой процедурой, или, если быть более точным, функцией.

OracleConnection conn = null;
    //OraclePreparedStatement pstat = null;
    OracleCallableStatement cstat = null;
    String sql = "BEGIN INSERT INTO TPROJECT P (VPROJECT_TITLE,VPROJECT_DESC)    VALUES(?,?) RETURNING P.NPROJECT_ID INTO ?;  END;";
    try {
        conn = ConnectionUtility.GetConnection();
        cstat = (OracleCallableStatement)conn.prepareCall(sql);

        cstat.setString(1, title);
        cstat.setString(2, description);
        cstat.registerOutParameter(3, OracleTypes.NUMBER);
        cstat.execute();

        int returnedID = cstat.getInt(3);
//          System.out.println(returnedID);

        conn.close();

        return returnedID;

1 Ответ

6 голосов
/ 03 октября 2011

В этом примере вы можете сделать это в PostgreSQL. Надеюсь, вы можете сделать что-то подобное в Oracle.

Вот как вы получаете идентификатор после INSERT INTO для автоматически генерируемых ключей, таких как serial . Здесь важно предоставить RETURN_GENERATED_KEYS в вызове prepareStatement ().

Resultset result;
PreparedStatement prep;
String query = "INSERT INTO myRel (data) VALUES (?)";

prep = db.prepareStatement(query ,Statement.RETURN_GENERATED_KEYS);

result = prep.getGeneratedKeys();

if(result.next() && result != null){
   System.out.println("Key: " + result.getInt(1));
} else {
   System.out.println("No, Nop nada");
}

Надеюсь, что кому-то поможет :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...