如何在JDBC中使用“set @variable = 0”

时间:2013-10-30 01:49:57

标签: java mysql jdbc

我正在使用MySQL和JDBC。

有没有办法可以使用user-defined variables像“set @rank = 0;”在JDBC?

具体来说,我想用JDBC实现排名。

set @rank = 0;
set @userCount = (select COUNT(*) from usertwo);

update usertwo A set userRank = 100*(@rank:=@rank+1/@userCount) order by (select AVG(B.votePoint) from votelist B where A.userNum = B.targetUserNum);

2 个答案:

答案 0 :(得分:2)

我是MySQL DBA,但我对JDBC一无所知(除了“它与Java有关”,这是我找到阅读令人痛苦的充分理由)......但是,看起来executeUpdate()正是您所寻找的。

int executeUpdate(String sql)
              throws SQLException
Executes the given SQL statement, which may be an INSERT, UPDATE, or DELETE
statement or an SQL statement that returns nothing, such as an SQL DDL statement.

最后一部分(“一个不返回任何内容的SQL语句”)听起来像SET @rank = 0的合适描述;它只返回结果集。

Parameters:
sql - an SQL Data Manipulation Language (DML) statement, such as INSERT, 
      UPDATE or DELETE; or an SQL statement that returns nothing, 
      such as a DDL statement.
Returns:
      either (1) the row count for SQL Data Manipulation Language (DML) 
      statements or (2) 0 for SQL statements that return nothing
Throws:
      SQLException - if a database access error occurs, this method is called on
      a closed Statement or the given SQL statement produces a ResultSet object

http://docs.oracle.com/javase/6/docs/api/java/sql/Statement.html#executeUpdate%28java.lang.String%29

我认为你对UPDATE usertwo...查询使用的是相同的东西......所以对同一个数据库连接顺序执行的三个executeUpdate()调用应该可以完成你想要的任务。

或者,实际上,您只需要对数据库进行2次调用,因为前两个可以组合在一个查询中:

SET @rank = 0, @userCount = (select COUNT(*) from usertwo);

用户定义的变量在MySQL会话中持续存在,该会话绑定到与数据库的单个连接。

答案 1 :(得分:0)

JDBC是你的java代码与MySQL数据库交互的方式,当你在java代码中创建查询/插入/更新时,你可以拥有你想要的任何java变量并将它们添加到你的查询字符串中。 / p>

当然,我可能会误解你的问题。你能详细说明一下吗?