powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Возврат значения ID (Sequence.nextval, Oracle) при вставке строки
15 сообщений из 15, страница 1 из 1
Возврат значения ID (Sequence.nextval, Oracle) при вставке строки
    #35931633
publexus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С помощью java.sql.PreparedStatement вставляю строку в таблицу, запрос примерно следующий:
Код: plaintext
insert into users(user_id,name,password) values(user_is_seq.nextval,?,?)
Проблема в том, чтобы возвратить user_id добавленного пользователя. Или нет иного выхода как выполнять два запроса, первый:
Код: plaintext
select user_is_seq.nextval from dual
а вторым уже собственно вставлять строку с полученным идентификатором, или может JDBC реализует какую-нибудь возможность в таких случаях?
...
Рейтинг: 0 / 0
Возврат значения ID (Sequence.nextval, Oracle) при вставке строки
    #35931653
Juga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
INSERT INTO <table or expression> <alias> (column,?)
<values_clause>|<subquery>
RETURNING <exprs> INTO <data_items>;
...
Рейтинг: 0 / 0
Возврат значения ID (Sequence.nextval, Oracle) при вставке строки
    #35931662
publexus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JugaINSERT INTO <table or expression> <alias> (column,?)
<values_clause>|<subquery>
RETURNING <exprs> INTO <data_items>;
Так это ж - PL/SQL. PreparedStatement разве может выполнять анонимные блоки PL/SQL и возвращать из них значение?
...
Рейтинг: 0 / 0
Возврат значения ID (Sequence.nextval, Oracle) при вставке строки
    #35931671
Juga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кто мешает сделать пайп фунцийку и возвращать реф курсор а вней шо угодно раз уж есть такая странная задача
...
Рейтинг: 0 / 0
Возврат значения ID (Sequence.nextval, Oracle) при вставке строки
    #35931676
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
publexus wrote at 14.04.2009 20:23:

> Так это ж - PL/SQL. PreparedStatement разве может выполнять анонимные
> блоки PL/SQL и возвращать из них значение?

Перейди на CallableStatement.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Возврат значения ID (Sequence.nextval, Oracle) при вставке строки
    #35931678
Juga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Даже проще всё, вот примерчик
Код: plaintext
1.
2.
3.
4.
5.
6.
OracleDataSource ods =  new  oracle.jdbc.pool.OracleDataSource();
ods.setURL("jdbc:oracle:thin:app_user/pass@server:1521:sid");
DefaultContext conn = ods.getConnection();
CallableStatement st = conn.prepareCall("INSERT INTO tableA (some_id) VALUES (1) RETURNING ROWID INTO :rowid0");
st.registerReturnParameter( 1 , OracleTypes.ROWID);
st.execute();
...
Рейтинг: 0 / 0
Возврат значения ID (Sequence.nextval, Oracle) при вставке строки
    #35931681
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
java.sql.Statement.RETURN_GENERATED_KEYS
...
Рейтинг: 0 / 0
Возврат значения ID (Sequence.nextval, Oracle) при вставке строки
    #35931682
publexus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jugaкто мешает сделать пайп фунцийку и возвращать реф курсор а вней шо угодно раз уж есть такая странная задача
Понятно, по сути то же самое, о чем я и говорил вначале: либо 2 запроса, либо создавать хранимую функцию, которая будет это делать , т.е. для каждой таблицы писать отдельный код. А я имел ввиду именно универсальную возможность JDBC, поскольку я где-то мельком слышал, что начиная с какой то версии есть возможность получить идентификатор вставленной строки.
...
Рейтинг: 0 / 0
Возврат значения ID (Sequence.nextval, Oracle) при вставке строки
    #35931687
publexus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczjava.sql.Statement.RETURN_GENERATED_KEYS
Эту функцию я тоже пробовал - выдает исключение, что данная возможность не поддерживается.
...
Рейтинг: 0 / 0
Возврат значения ID (Sequence.nextval, Oracle) при вставке строки
    #35931689
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
publexusBlazkowiczjava.sql.Statement.RETURN_GENERATED_KEYS
Эту функцию я тоже пробовал - выдает исключение, что данная возможность не поддерживается.
Искать драйвер, которым поддерживается.
...
Рейтинг: 0 / 0
Возврат значения ID (Sequence.nextval, Oracle) при вставке строки
    #35931692
publexus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, намеки понял, буду пытаться применить предложенные варианты.
...
Рейтинг: 0 / 0
Возврат значения ID (Sequence.nextval, Oracle) при вставке строки
    #35931702
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
publexusСпасибо, намеки понял, буду пытаться применить предложенные варианты.
http://download.oracle.com/docs/cd/B19306_01/java.102/b14355/jdbcvers.htm#CHDEGDHJ
...
Рейтинг: 0 / 0
Возврат значения ID (Sequence.nextval, Oracle) при вставке строки
    #35937194
publexus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот мой вариант.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
PreparedStatement queryInsertRow = conn.prepareStatement("insert into users(user_id,name,password) values(user_is_seq.nextval,?,?)",
                         new  String[] {"user_id"}
                        );
            }

            queryInsertRow.setObject( 1 , "name");
            queryInsertRow.setObject( 2 , "");
            queryInsertRow.execute();
            ResultSet rs = queryInsertRow.getGeneratedKeys();
             if (rs.next()) {
                user_id = rs.getInt( 1 );
            }

Как оказалось оракловый JDBC поддерживает возврат значений только начиная с 10 версии.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Возврат значения ID (Sequence.nextval, Oracle) при вставке строки
    #38434009
ivalera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
publexus,

в этой строке
txt_id = rs.getInt(1);

у меня выводит ошибку
Код: plaintext
1.
2.
 incompatible types
  required: JTextField
  found:    int


вот еще часть этого кода
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
String sql = "Insert into PeopleInfo (id, fname, sname, age) values (id.nextval, ?, ?, ?)";
            
            pst = conn.prepareStatement(sql,new String[] {"id"});
            //pst.setString(1, txt_id.getText());
            pst.setString(2, txt_fname.getText());
            pst.setString(3, txt_sname.getText());
            pst.setString(4, txt_age.getText());
            
            pst.execute();
            
            rs = pst.getGeneratedKeys();
            if(rs.next())
            {
                //String add1 = rs.getString("id");
                txt_id = rs.getInt(1);
            }


Что делать?
...
Рейтинг: 0 / 0
Возврат значения ID (Sequence.nextval, Oracle) при вставке строки
    #38434670
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если не сверхкритично по производительности, гораздо проще 1 запросом выбрать код, а вторым его вставить, уже зная.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Возврат значения ID (Sequence.nextval, Oracle) при вставке строки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]