若存储过程为:
CREATE PROCEDURE ss()
begin
     update consignee set stic = 1;
end;在java 调用执行后: int s = cstmt.executeUpdate();s 的值 > 0; (即update 了多少条,就输出多少条数值);但:CREATE PROCEDURE ss()
begin
     START TRANSACTION;
     update consignee con set stic = 1;
     COMMIT;
end;在存储过程里,加上事务后, 再在java 里调用时, s = cstmt.executeUpdate();  s 却 = 0 ;不知道为什么,有哪位同志碰到过吗? 

解决方案 »

  1.   

    update consignee con set stic = 1;
    你设置的别名 con 就没用啊?   sql很短  就不要别名了。
      

  2.   

    楼主对STATEMENT的理解有问题.请参考下面的API说明.
    http://java.sun.com/javase/6/docs/api/java/sql/Statement.html#executeUpdate(java.lang.String)Returns:
    either (1) the row count for SQL Data Manipulation Language (DML) statements or (2) 0 for SQL statements that return nothing你可以在命令行状态下执行一下你的存储过程,看看显示的执行结果是什么?如果想知道存储过程的内容执行的更新语句的信息,你需要使用CallableStatement,然后用输出参数来取得.
      

  3.   

    To 6楼, 首先,我是用 CallableStatement 来获取更新语句的信息的,并且在第一中情况下,已经得到结果了, 关键是第二种情况,在存储过程里加了事务,就获取不到正确的结果了 ...你可能没看明白问题 ... 但谢谢你的参与 ,,
      

  4.   

    还是没有答案 ...忘说了,数据库是MySQL ...
      

  5.   

    第一种情况,存储过程最后一个命令是update,对于数据库来说,该命令的返回值是被更新的件数,该返回值被数据库传给了java
    第二种情况,存储过程的最后一个命令是commit,对于数据库来说,能正常提交事务时该命令的返回值是0,否则是0以外的值,该返回值被数据库传给了java
    所以两种情况的结果就不一样了