有没有办法用SQL Server JDBC驱动程序显示PRINT结果?

时间:2009-11-18 23:11:06

标签: java sql-server sql-server-2008 jdbc

如果我的存储过程中有一个print语句:

print 'message'

有没有办法在通过JDBC连接到SQL Server 2008的java程序中获取输出?

此外,从JDBC应用程序调用时,是否存在调用print消息将关闭连接的危险?

3 个答案:

答案 0 :(得分:7)

是的,有:https://dba.stackexchange.com/a/44373/5457

Statement stmt = ...;
stmt.execute("some sql statement");
SQLWarning warning = stmt.getWarnings();

while (warning != null) {
    System.out.println(warning.getMessage());
    warning = warning.getNextWarning();
}

答案 1 :(得分:1)

这个article显示了如何在VB.NET中实现这一点

我相信你可以在你的java代码中做同样的事情。

您需要做的就是将处理函数附加到SqlInfoMessageEvent

上面文章中指定的VB.NET代码在my studio 2005环境中无法正常工作。

所以我把它写成如下

Imports System.Data.SqlClient
Module Module1

    Public Sub Main()

        'change your database name in following line.
        Dim conn As New SqlConnection("server=(local);Integrated Security=SSPI;database=Test")



        AddHandler conn.InfoMessage, New SqlInfoMessageEventHandler(AddressOf OnInfoMessage)



        conn.Open()



        Dim cmd As New SqlCommand()

        cmd.Connection = conn

        cmd.CommandType = CommandType.StoredProcedure

        cmd.CommandText = "[SPWithPrint]"



        cmd.ExecuteNonQuery()



        conn.Close()



        ' Dts.TaskResult = Dts.Results.Success



    End Sub



    Private Sub OnInfoMessage(ByVal sender As Object, ByVal args As System.Data.SqlClient.SqlInfoMessageEventArgs)

        Dim err As SqlError
        For Each err In args.Errors
            Console.WriteLine("The {0} has received a severity {1}, state {2} error number {3}\n" & _
      "on line {4} of procedure {5} on server {6}:\n{7}", _
      err.Source, err.Class, err.State, err.Number, err.LineNumber, _
    err.Procedure, err.Server, err.Message)
        Next

    End Sub

End Module

其他有用的链接如下。

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.infomessage.aspx

http://msdn.microsoft.com/en-us/library/a0hee08w.aspx

答案 2 :(得分:0)

你不能这样做。您可以选择使用存储过程中的输出参数或执行

SELECT 'message'

将为您提供可以在Java中阅读的ResultSet