有没有办法让
获得“受行影响”的结果SELECT * INTO TableB FROM TableA
使用Microsoft的SQL Server JDBC驱动程序?当我在SQL Server Management Studio中执行该查询时,它以与DELETE,INSERT或UPDATE相同的方式返回行数。
我尝试了executeQuery
,但它没有返回ResultSet
。我尝试executeUpdate
,但我总是得到-1
,我尝试execute
,但返回值似乎是false
,因此没有ResultSet
。
我从2017年1月31日起下载了MS JDBC驱动程序6.0,因为我读到了旧版本的问题。
答案 0 :(得分:0)
更新:此问题已在SQL Server的JDBC驱动程序的version 6.1.5中得到修复。
<小时/> (上一个答案)
测试确认即使使用最新的Microsoft JDBC驱动程序(6.0.8112.100)
sql = "SELECT * INTO TableB FROM TableA";
try (Statement st = conn.createStatement()) {
int n = st.executeUpdate(sql);
System.out.printf("%d row(s) affected", n);
}
产生
-1 row(s) affected
,而jTDS驱动程序正确返回实际行数:
3 row(s) affected
Microsoft JDBC驱动程序的解决方法是使用匿名代码块返回包含@@ROWCOUNT
的ResultSet
sql =
"SET NOCOUNT ON; " +
"SELECT * INTO TableB FROM TableA; " +
"SELECT @@ROWCOUNT AS n; ";
try (
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sql)) {
rs.next();
int n = rs.getInt(1);
System.out.printf("%d row(s) affected", n);
}
正确返回
3 row(s) affected