如果我的存儲過程在其內部具有一個print語句:有沒有辦法使用SQL Server JDBC驅動程序顯示PRINT結果?
print 'message'
有沒有辦法來獲取在通過JDBC連接到SQL Server 2008的Java程序的輸出?
另外,有沒有print
消息留給調試的危險會在從JDBC應用程序調用時關閉連接?
如果我的存儲過程在其內部具有一個print語句:有沒有辦法使用SQL Server JDBC驅動程序顯示PRINT結果?
print 'message'
有沒有辦法來獲取在通過JDBC連接到SQL Server 2008的Java程序的輸出?
另外,有沒有print
消息留給調試的危險會在從JDBC應用程序調用時關閉連接?
是的,有:https://dba.stackexchange.com/a/44373/5457
Statement stmt = ...;
stmt.execute("some sql");
SQLWarning warning = stmt.getWarnings();
while (warn != null) {
System.out.println(warning.getMessage());
warning = warning.getNextWarning();
}
你不能這樣做。你的選擇是使用輸出參數從存儲過程或做
SELECT 'message'
,這將給你一個ResultSet
,你可以在Java讀取。
這article展示瞭如何做到這一點在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