PreparedStatement返回getUpdateCount()= -1

时间:2016-04-29 21:04:18

标签: java sql-server jdbc

当我们使用executeUpdate()方法时,无法插入返回ResultSet的指令,例如SELECT。我碰巧有一个更新来启动一个触发器,触发器有一个命令“Select * from table”。

我可以通过将此命令分配给变量作为示例来解决问题:“从表中选择*”很快,对于JDBC executeUpdate,resultSet将没有问题。

问题是系统可以使用触发器没有域的其他集成系统而且我无法更改,因此选项是使用run命令(),如代码图像所示,我可以检查是否return是ResultSet(返回true)。在语句中丢弃触发器中生成的ResultSet并且getMoreResults返回我受Update影响的行数,如果帧为蓝色,则使用该语句返回值3,这是正确的。

问题是使用PreparedStatement(红框),其中getUpdateCount返回-1,但应返回3,这是UPDATE中受影响的行数。

SQL Server 2012数据库或2008中出现问题,未使用Oracle模拟

使用我正在更新的表上的现有触发器跟随代码示例

我想知道是否有人知道为什么getMoreResults的回报不同。

Code Java

Trigger

public class TestarConexao {

    public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException {

        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
        Connection conn = DriverManager.getConnection("jdbc:odbc:magnus;user=rh;password=rh;MARS_Connection=yes;", "rh", "rhk");

        Statement stmt = conn.createStatement();
        boolean is = stmt.execute("update Usu_teste set usu_codigo = 1 where usu_codigo = 1");

        while (is) {
            System.out.println("There is ResultSet: " + is);
            is = stmt.getMoreResults();
        }
        System.out.println("UpdateCount with Statement: " + stmt.getUpdateCount());

        PreparedStatement prepStmt = conn.prepareStatement("update Usu_teste set usu_codigo = 1 where usu_codigo = 1");
        boolean isPrep = prepStmt.execute();
        while (isPrep){
            System.out.println("There is ResultSet: " + isPrep);
            isPrep = prepStmt.getMoreResults();
        }

        System.out.println("UpdateCount with PreparedStatement: " +prepStmt.getUpdateCount());
    }
}

0 个答案:

没有答案