如何用Java从存储过程(Msql)检索数据?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (69)

我在sql server中有这个存储过程:

create procedure [dbo].[prSum]

AS
    create table @SUM (
         ClientName Varchar(40), 
         SearchDoc Varchar(20), 
         SearchName Varchar(20), 
    )
    --each one of this procedures returns a query with the same colunms size of @SUM
    insert into @SUM exec pr1
    insert into @SUM exec pr2
    insert into @SUM exec pr3
    insert into @SUM exec pr4
    insert into @SUM exec pr5

RETURN Select * from @SUM
GO

在SSMS中,我可以运行:

exec prSum 

并显示Select * from @SUM。

但是我尝试用jdbc在我的java类上得到这个:

package calc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class ConnectURL {
    public static void main(String[] args) {

        String connectionUrl = "jdbc:sqlserver://######;databaseName=####;user=#####;password=###;

        try (Connection con = DriverManager.getConnection(connectionUrl); Statement stmt = con.createStatement();) {
            String SQL = "{ call dbo.prSum}";
            ResultSet rs = stmt.executeQuery(SQL);

            while (rs.next()) {
                System.out.println(rs.getString("ClientName"));
            }
        }
        catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

得到和得到这个:

com.microsoft.sqlserver.jdbc.SQLServerException:该语句未返回结果集。

提问于
用户回答回答于

您的存储过程有很多问题。但事实上并没有返回任何数据。在将结果发送给客户端之前,您正在返回。

应该是这样的:

create procedure [dbo].[prSum]

AS
begin
    set nocount on;
    declare @SUM table (
         ClientName Varchar(40), 
         SearchDoc Varchar(20), 
         SearchName Varchar(20)
    )
    --each one of this procedures returns a query with the same colunms size of @SUM
    insert into @SUM exec pr1;
    insert into @SUM exec pr2;
    insert into @SUM exec pr3;
    insert into @SUM exec pr4;
    insert into @SUM exec pr5;

    Select * from @SUM;
    return;
end
GO
用户回答回答于

这是因为你必须使用一种executeUpdate()方法。executeUpdate用于INSERT,DELETE和UPDATE并返回修改的行数,当executeQuery是SELECT语句并返回ResultSet时。

扫码关注云+社区

领取腾讯云代金券