当我们使用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的回报不同。
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());
}
}