在Java中执行.sql脚本时,我可以得到受影响的行数吗?

在Java中执行.sql脚本时,我可以得到受影响的行数吗?,java,mysql,ibatis,Java,Mysql,Ibatis,我使用JDBC连接到远程数据库,然后使用ibatis ScriptRunner执行查询 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); Connection con = DriverManager.getConnection(url3); ScriptRunner runner = new ScriptRunner(con); runner.setSendFullScript(true); runner.setSto

我使用JDBC连接到远程数据库,然后使用ibatis ScriptRunner执行查询

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection con = DriverManager.getConnection(url3); 
ScriptRunner runner = new ScriptRunner(con);
runner.setSendFullScript(true);
runner.setStopOnError(true);
runner.runScript(new BufferedReader(new FileReader("C:/Script/Test.sql")));
这段代码为我执行脚本,数据库中有2行受影响。是否有一种方法可以获取和打印受影响的行数,类似于在SQLServerManagementStudio中执行脚本时在消息中看到的行数

编辑:这是我试图运行的脚本

USE Dashboard;
DECLARE @userName1 varchar(MAX);
SET @userName1 = 'jrambo';
DECLARE @ExternalUserID1 int;
SET @ExternalUserID1 = (SELECT ExternalUserID FROM ExternalUsers WHERE username = @userName1);

DELETE FROM DBO.INTERESTPREFS WHERE InterestID in (SELECT InterestID FROM DBO.INTERESTS WHERE externaluserid IN (@ExternalUserID1));

您可以使用JDBC executeBatch方法,而不是使用ScriptRunner:

conn.setAutoCommit(false);
String line = null;
 BufferedReader in = 
   new BufferedReader(new FileReader("C:/Script/Test.sql")));

// Read your sql file line by line 
while((line = in.readLine()) != null){
  // and add SQL statements in the batch.
  stmt.addBatch(line); 
}
// int[] to hold returned values
int[] count = stmt.executeBatch();

//commit statements
conn.commit();
executeBatch将返回Java文档中描述的整数数组:

方法executeBatch返回的数组中的元素可能是 以下其中一项:

大于或等于零的数字-表示命令已成功处理,并且是给出 数据库中受命令行影响的行数 执行

值SUCCESS\u NO\u INFO-表示命令已成功处理,但受影响的行数未知


我尝试使用您发布的示例来执行我的脚本。我的测试没有错误地完成,但是脚本没有运行。我检查了数据库以进行验证。使用ScriptRunner时,它确实会成功运行。使用executeBatchyes运行脚本时是否存在某些限制,我认为基本上应该有一条sql逐行指令或类似的指令。你的剧本是这样的吗?我的剧本很基本。我已将它添加到原来的问题中。此脚本应从数据库中删除2行。它在使用ScriptRunner时起作用,但在executeBatch中不起作用。我不确定为什么它不能与executeBatch一起工作,因为测试完成时没有错误。