о Java использовать Oracle для работы с изображениями - PullRequest
1 голос
/ 19 декабря 2011

Я не использую SSH для своего проекта. Сначала я вставляю empty_blob(), а затем обновляю его. Но когда я вызываю executeUpdate(), другой процесс, кажется, вставляет новую запись. Мой sql max(no) выбрал бынеправильная запись.И как я могу использовать транзакцию в транзакции?

    conn.setAutoCommit(false);
    pstm = conn.prepareStatement(ADD_SQL);
    pstm.setString(1, brand.getName());
    pstm.setString(2, brand.getDescription());
    pstm.setString(3, brand.getAddress());
    pstm.executeUpdate();

    pstm = conn.prepareStatement("select * from brands where no=(select max(no) from brands)        for update");
rs = pstm.executeQuery();

Ответы [ 2 ]

0 голосов
/ 19 декабря 2011

Чтобы получить последнее сгенерированное значение последовательности, у вас есть две опции:

Вы можете использовать seq_name.nextval после выполнения оператора вставки (например, SELECT my_sequence.nextval FROM dual;)

Если ваш столбец заполнен с помощью триггера, вы можете использовать JDBC API для получения сгенерированного значения:

pstm = conn.prepareStatement(ADD_SQL, new String[] { "NO"} );
...
pstm.executeUpdate();

ResultSet rsNo = pstmt.getGeneratedKeys();
if (rs.next())
{
   long id = rs.getLong(1);
   System.out.println("The generated value was: " + id);
}
0 голосов
/ 19 декабря 2011

Какое-то отношение к уровню изоляции транзакции.

Вам не нужно, где нет = (выберите max (no) из ....

Я предполагаю, что вы используете последовательность длязаполните 'нет' и нужно вернуть это вновь вставленное значение.

insert into foo(no, name,description, address)
values(seq_no.nextvalue, ?,?,?);
returning no into ?

затем

...
pstm.registerOutParameter(4,TYPES.NUMBER,0);
pstm.executeUpdate();
int newNo=pstm.getInt(4);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...