получите значение от обновленной строки

Я пытаюсь получить новую оценку от оператора UPDATE в Java

int userID = 99;

String sql = "UPDATE table SET rating=rating+1 WHERE user_REF="+userID;
statement.executeUpdate(sql);

Я могу просто сделать другой оператор SELECT, но не являюсь там лучшим способом получить значение или строку при обновлении?

5
задан KM. 16 February 2010 в 14:32
поделиться

5 ответов

В MySQL:

$query1 = 'UPDATE `table` SET rating = (@rating:= rating) + 1 WHERE id = 1';
$query2 = 'select @rating';
1
ответ дан 15 December 2019 в 00:59
поделиться

всем спасибо за ответы, в итоге я сделал это вот так :

int userID = 99;

String sql = "SELECT id, rating FROM table WHERE user_REF="+userID;
ResultSet rs = statement.executeQuery(sql);

rs.first();
float oldRating = rs.getFloat("rating");
float newRating = oldRating +1;

rs.updateFloat("rating", newRating);
rs.updateRow();

return newRating;

таким образом он (или, по крайней мере, так кажется) выполняет только один запрос, чтобы найти правильную строку, или я ошибаюсь?

1
ответ дан 15 December 2019 в 00:59
поделиться

Поскольку attr _ accessors не имеет ничего общего с тем, как ActiveRecord обрабатывает столбцы. Я показал это в этот вопрос . В основном все вещи, происходящие в поисковиках, которые касаются столбцов, работают с хэшем attributes , а не с переменными экземпляра, которые объявляют пользователи доступа.

изменить: на самом деле мой ответ не отвечает полностью на вопрос. это просто объясняет, почему attr _ access не может быть никакой помощи здесь. с нетерпением ждем, когда кто-то выполнит оставшуюся часть работы:)

-121--2823076-

Можно обернуть java.util.Random в компонент и использовать jsp: useBean .

package com.example;

import java.util.Random;

public class RandomBean {
    private static final Random RANDOM = new Random();

    public int getNextInt() {
        return RANDOM.nextInt();
    }
}

... чтобы вы могли использовать его в своем JSP следующим образом:

<jsp:useBean id="random" class="com.example.RandomBean" scope="application" />

...

<div class="${random.nextInt % 2 == 0 ? 'redlogo' : 'greenlogo'}">

(обратите внимание, что я оптимизировал c: выбрать подальше с помощью троичного оператора).

-121--2754212-

Будьте осторожны в том, что большинство решений зависит от базы данных (независимо от того, хотите ли вы независимости базы данных в вашем приложении, имеет значение).

Еще одно решение, которое вы можете попробовать, это написать процедуру и выполнить ее следующим образом

my_package.updateAndReturnRating(refId, cursor record). 

Конечно, это может/не может сделать само решение сложным, но стоит "оценки" по крайней мере.

0
ответ дан 15 December 2019 в 00:59
поделиться

Короче говоря, нет, нет способа сделать это с помощью стандартного ANSI SQL.

У вас есть три варианта:

1) Сделать это в двух запросах - обновление, затем select

2) Создать хранимую процедуру, которая выполнит обновление, а затем вернет select

3) Использовать расширение для конкретной СУБД, например, предложение PostgreSQL RETURNING

Обратите внимание, что варианты 2) и 3) зависят от конкретной базы данных.

2
ответ дан 15 December 2019 в 00:59
поделиться

В PostgreSQL есть пункт RETURNING

См .: http://www.postgresql.org/docs/8.3/interactive/sql-update.html

0
ответ дан 15 December 2019 в 00:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: