eli*_*man 5 java sql sql-server stored-procedures jdbc
我在SQL Server 2014中有一个存储过程。此存储过程采用type参数StringArrayType。这是修改它的存储过程脚本:
ALTER PROCEDURE [dbo].[sp_something] @list_a StringArrayType READONLY
AS
DECLARE @sol INT = 0
DECLARE @MAXOnlineProcesses INT = 0
BEGIN
SET @sol = ( SELECT COUNT(*)
FROM @list_a
WHERE Category not in ( SELECT AgentHostName
FROM [dbo].[TableA]
WHERE DATEDIFF(SECOND , [CurrentRequestTime] , GETDATE()) <
( [RequestsInterval] * ( SELECT [Value]
FROM [ATC].[dbo].[TableB] WITH(NOLOCK)
WHERE [Parameter] = 'RemoveProcessAfterNumRequests'))))
SELECT @sol as [AA],
(@sol - @MAXOnlineProcesses) as [BB]
END
Run Code Online (Sandbox Code Playgroud)
我在.Net中有一个代码,该代码设置DataTable变量以执行此存储过程:
Dim dtable As DataTable = New DataTable
Try
Dim sqlConnection As String = "server=" & SQLServerName & ";uid=" & SQLUserID & ";pwd=" & SQLpassword & ";database=" & SQLDBName
dtable.Columns.Add("Category")
For Each item As String In list
dtable.Rows.Add(item)
Next
Using cnn As New SqlClient.SqlConnection(sqlConnection)
Using cmd As SqlClient.SqlCommand = New SqlClient.SqlCommand("sp_something", cnn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.AddWithValue("@list_a", dtable)
cmd.CommandTimeout = 30
Using adapter As New SqlClient.SqlDataAdapter(cmd)
Using ds As New DataSet
adapter.Fill(ds)
Dim Host2Wait As Integer = ds.Tables(0).Rows(0)("BB")
If Host2Wait > 0 Then
//some code
End If
End Using
End Using
End Using
End Using
Return True
Catch ex As Exception
// some code
Return False
End Try
Run Code Online (Sandbox Code Playgroud)
现在,我需要使用Java代码调用此存储过程。我怎样才能做到这一点?我该如何传递将被设置为的java中的存储过程StringArrayType?我看到了一些有关DataTable在Java中可以替换.Net的问题,但是我无法破解如何使用WebRowSet进行操作。
我尝试了JdbcRowSet和WebRowSet,但是我认为这不是正确的方向。