Если вы хотите видеть собственные ZLP-коды, вы должны использовать шрифты Zebra, если вы не используете их, вы увидите коды .GRF, как показано ниже
^ FT320,64 ^ XG007.GRF, 1, 1 ^ FS
и не понимаю их. После этого нажмите «Печать», затем выберите «Печать в файл». Таким образом, вы можете видеть четкие коды ZLP.
с использованием getGeneratedKeys ():
resultSet = pstmt.getGeneratedKeys();
if (resultSet != null && resultSet.next()) {
lastId = resultSet.getInt(1);
}
Вы можете использовать предложение RETURNING
, чтобы получить значение любого столбца, который вы обновили или вставили. Он работает с триггером (т.е. вы получаете значения, фактически вставленные после выполнения триггеров). Обратите внимание:
SQL> CREATE TABLE a (ID NUMBER PRIMARY KEY);
Table created
SQL> CREATE SEQUENCE a_seq;
Sequence created
SQL> VARIABLE x NUMBER;
SQL> BEGIN
2 INSERT INTO a VALUES (a_seq.nextval) RETURNING ID INTO :x;
3 END;
4 /
PL/SQL procedure successfully completed
x
---------
1
SQL> /
PL/SQL procedure successfully completed
x
---------
2
Я не мог комментировать, иначе я бы добавил к сообщению Винко Врсаловича :
The id generated by a sequence can be obtained via
insert into table values (sequence.NextVal, otherval)
select sequence.CurrVal
ran in the same transaction as to get a consistent view.
Обновление последовательности после получения от нее следующего значения является автономной транзакцией. В противном случае другой сеанс получит такое же значение из последовательности. Таким образом, получение currval не получит вставленный идентификатор, если другой сеанс выбрал из последовательности между вставкой и выбором.
С уважением, Роб
EMS , Database Workbench и IBExpert имеют облегченную версию
Мне больше всего нравится IBExpert
На самом деле вопрос в том, можете ли вы запросить последнее сгенерированное значение идентификатора в текущем сеансе , даже если другие сеансы также вставляют строки и генерируют свои собственные значения идентификаторов. Вы можете быть уверены, что каждая РСУБД, предлагающая функцию автоматического увеличения, предлагает способ запроса этого значения , и он сообщает вам последний идентификатор, сгенерированный в вашей текущей области сеанса. На это не влияют вставки, сделанные в других сеансах.Идентификатор, сгенерированный последовательностью, можно получить с помощью
insert into table values (sequence.NextVal, otherval)
select sequence.CurrVal
, запущенного в той же транзакции, чтобы получить согласованное представление.
I think you'll find this helpful:
I have a table with a auto-incrementing id. From time to time I want to insert rows to this table, but want to be able to know what the pk of the newly inserted row is.
String query = "BEGIN INSERT INTO movement (doc_number) VALUES ('abc') RETURNING id INTO ?; END;";
OracleCallableStatement cs = (OracleCallableStatement) conn.prepareCall(query);
cs.registerOutParameter(1, OracleTypes.NUMBER );
cs.execute();
System.out.println(cs.getInt(1));
Source: Thread: Oracle / JDBC Error when Returning values from an Insert
Я не мог комментировать, иначе я бы просто добавил в сообщение dfa, но ниже приведен пример этой функциональности с прямым JDBC.
http://www.ibm.com/developerworks/java/library/j-jdbcnew/
Однако, если вы используете что-то вроде Spring, они скроют для вас множество кровавых деталей. Если это может быть полезно, просто хороша Spring Chapter 11, в которой подробно рассказывается о JDBC. Его использование избавило меня от многих головных болей.