在Java中执行SQL Sever 2000中存贮过程getpage(带参数的存贮过程),为什么不能返回结果集(27分)

  • 主题发起人 主题发起人 mycwcgr
  • 开始时间 开始时间
M

mycwcgr

Unregistered / Unconfirmed
GUEST, unregistred user!
在Java中执行SQL Sever 2000中存贮过程getpage(带参数的存贮过程),为什么不能返回结果集
下面rs结果集中,没有一行记录,而我在SQL Sever 2000中执行exec getpage 'select * from project_info',2,2
却能返回记录!

Class.forName(comm_availble.class_forname);
conn=DriverManager.getConnection(comm_availble.url,comm_availble.user,comm_availble.password);
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

sql="exec getpage 'select * from project_info',2,2";
ResultSet rs;
rs=stmt.executeQuery(sql);

package server;
public class comm_availble {
public static String url="jdbc:microsoft:sqlserver://ccww:1433;DatabaseName=cwjava";
public static String class_forname="com.microsoft.jdbc.sqlserver.SQLServerDriver";
public static String user="cw";
public static String password="aaa";
}
 
在java中这样调用
先在SQL Server中创建存储过程如下:
CREATE PROCEDURE InsertOrtho
(@ChildID varchar(10) out,
@date datetime out,
@therapistID varchar(10) out,
@clinicID integer out,
@skeletal varchar(1) out,
@angleClass varchar(1) out,
@deflection varchar(1) out,
@OrthoNotes varchar(200) out)
AS
begin

INSERT INTO tblPatientOrtho VALUES
(@ChildID, @date, @TherapistID, @ClinicID, @Skeletal, @angleClass, @deflection, @OrthoNotes)
RETURN
END

这是一个向数据库插入的存储过程,所有的参数都是输出的,在JAVA里可以这样调用这个存储过程,程序如下:
前面数据库的连接我就不写了
public boolean InsertOrtho(Ortho ortho, String childID)
{
boolean success = true;

try
{
CallableStatement stmt = con.prepareCall("{call InsertOrtho(?, ?, ?, ?, ?, ?, ?, ?)}");
stmt.registerOutParameter(1, java.sql.Types.VARCHAR);
stmt.registerOutParameter(2, java.sql.Types.TIMESTAMP);
stmt.registerOutParameter(3, java.sql.Types.VARCHAR);
stmt.registerOutParameter(4, java.sql.Types.INTEGER);
stmt.registerOutParameter(5, java.sql.Types.VARCHAR);
stmt.registerOutParameter(6, java.sql.Types.VARCHAR);
stmt.registerOutParameter(7, java.sql.Types.VARCHAR);
stmt.registerOutParameter(8, java.sql.Types.VARCHAR);

stmt.setString(1, childID);
stmt.setObject(2, ortho.GetDate());
stmt.setString(3, ortho.GetTherapistID());
stmt.setInt(4, ortho.GetClinicID());
stmt.setString(5, ortho.GetSkeletal());
stmt.setString(6, ortho.GetAngleClass());
stmt.setString(7, ortho.GetDeflection());
stmt.setString(8, ortho.GetOrthoNotes());
stmt.executeUpdate();
stmt.clearParameters();
stmt.close();
}
catch (SQLException e)
{
database.AddSQLError(e, "InsertOrtho()");
e.printStackTrace();
success = false;
}
catch (java.lang.Exception e)
{
database.AddException(e, "InsertOrtho()");
e.printStackTrace();
success = false;
}
return success;
}
 
但是,这个存储过程是我在SQL中定义的,主要功能是根据输入的参数,执行一个select语句,得出查询结果!所以需要这个存贮过程象普通select语句一样返回结果集
 
是呀
返回的你可以用dateset来接收不就是结果集了?
 
楼上说的没错,存储过程调用就是用prepareCall,楼主为什么不试试??
 
但是如何返回调用存储过程的结果集呢?
 
存储过程调用是可以用prepareCall并且也能input参数
但是使用ResultSet rs=stmt.executeQuery();
rs的结果集为空,但是存储过程中的select语句应该返回多条记录,我在sql server2000中能够得出正确结论
 
后退
顶部