Есть ли способ отображения результатов PRINT с драйвером JDBC сервера SQL? - PullRequest
4 голосов
/ 19 ноября 2009

Если в моей хранимой процедуре есть оператор print:

print 'message'

Есть ли способ получить выходные данные в программе Java, которая подключается к SQL Server 2008 через JDBC?

Кроме того, существует ли опасность того, что print сообщения, оставленные для отладки, отключат соединение при вызове из приложения JDBC?

Ответы [ 3 ]

8 голосов
/ 15 апреля 2014

Да, есть: 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 голос
/ 09 февраля 2010

эта статья показывает, как это сделать в VB.NET

Я уверен, что вы можете сделать то же самое в своем коде Java.

Все, что вам нужно сделать, это присоединить функцию-обработчик к SqlInfoMessageEvent

Код VB.NET, указанный в приведенной выше статье, не работает должным образом, как в моей среде студии 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

0 голосов
/ 30 января 2010

Вы не можете сделать это. Вы можете использовать выходной параметр из вашей хранимой процедуры или сделать

SELECT 'message'

, который даст вам ResultSet, который вы можете прочитать на Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...