从更新的行中获取值

时间:2010-02-16 13:09:12

标签: java sql mysql jdbc

我正试图从java

中的UPDATE语句中获取新的评级
int userID = 99;

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

我可以做另一个SELECT语句,但是在更新时没有更好的方法来检索值或行吗?

5 个答案:

答案 0 :(得分:2)

简而言之,不,使用ANSI标准SQL无法做到这一点。

您有三种选择:

1)在两个查询中执行 - 更新,然后选择

2)创建一个执行更新的存储过程,然后返回select

3)使用特定于DB的扩展,例如PostgreSQL RETURNING子句

请注意,选项2)和3)是特定于数据库的。

答案 1 :(得分:1)

在MySQL中:

$query1 = 'UPDATE `table` SET rating = (@rating:= rating) + 1 WHERE id = 1';
$query2 = 'select @rating';

答案 2 :(得分:1)

感谢所有人的回复,我最终这样做了:

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;

那样它(或者至少看起来如此)只能找到一个查询正确的行,或者我错了吗?

答案 3 :(得分:0)

在PostgreSQL中有RETURNING子句

请参阅:http://www.postgresql.org/docs/8.3/interactive/sql-update.html

答案 4 :(得分:0)

请注意,大多数解决方案都依赖于数据库(无论您是否希望数据库独立于您的应用程序事务中)。

您可以尝试的另一种解决方案是编写一个过程并按如下方式执行

my_package.updateAndReturnRating(refId, cursor record). 

当然,这可能/可能不会使解决方案本身变得复杂,但至少值得“评估”。