在Java中执行.sql脚本时,我可以得到受影响的行数吗?
我使用JDBC连接到远程数据库,然后使用ibatis ScriptRunner执行查询在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
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一起工作,因为测试完成时没有错误。