JDBC调用Sql server 2005 存储过程出现的问题

环境:JDK1.5

数据库:Sql server 2005 +sp2

JDBC驱动:sqljdbc.jar

测试类代码如下:

import java.sql.*;

public class test {

 /**
  * @param args
  * @throws SQLException
  * @throws ClassNotFoundException
  */
 public static void main(String[] args) throws SQLException, ClassNotFoundException {
  Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
  Connection con = DriverManager.getConnection("jdbc:sqlserver://192.168.1.168:1433;SelectMethod=cursor;DatabaseName=DBName", "sa", "sa");
  
  //PreparedStatement ps = con.prepareCall("exec Proc_checkPDDateTime '00','00'");  --使用PreparedStatement也可以
  CallableStatement ps = con.prepareCall("{call dbo.Proc_checkPDDateTime('1602327','20100526162514')}");
  
  //{第一种方式}  两种方式调用存储过程的返回值都可以
//  ResultSet rs= ps.executeQuery();
//  if(rs.next()){
//   System.out.println("--"+rs.getString(1)+"--");
//  }
  
  //{第二种方式}
  if(ps.execute()){  --如果ps执行后返回的是ResultSet,那么ps.execute返回True ,且必须要通过ps.getResultSet()方法获得结果集
   if(ps.getResultSet().next()){
    System.out.println("--"+ps.getResultSet().getString(1)+"--");
   }
  }
 }

}

扫描二维码关注公众号,回复: 2221608 查看本文章

运行时,提示如下错误:

Exception in thread "main" com.microsoft.sqlserver.jdbc.SQLServerException: 无法在给定的语句中打开服务器游标。请使用默认结果集或客户端游标。
 at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(Unknown Source)
 at com.microsoft.sqlserver.jdbc.IOBuffer.processPackets(Unknown Source)
 at com.microsoft.sqlserver.jdbc.SQLServerStatement.sendExecute(Unknown Source)
 at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecute(Unknown Source)
 at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.execute(Unknown Source)

后来经多次测试发现,将

  Connection con = DriverManager.getConnection("jdbc:sqlserver://192.168.1.168:1433;SelectMethod=cursor;DatabaseName=DBName", "sa", "sa");
中的 SelectMethod=cursor 删除,运行正常。

 

后记:以上代码在JDK1.6+sqljdbc4.jar环境下测试完全正常,而且有没有删除SelectMethod=cursor都可以照常运行。疑惑中...

猜你喜欢

转载自blog.csdn.net/lotusyangjun/article/details/5626077