环境: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)+"--");
}
}
}
}
运行时,提示如下错误:
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都可以照常运行。疑惑中...