누구나 SQL Server JDBC에서 TVP (테이블 값 매개 변수)를 사용하는 방법에 대한 지침을 제공 할 수 있습니까? 나는 마이크로 소프트에서 제공하는 SQL Server 드라이버의 6.0 버전을 사용하고, 나는 official documentation뿐만 아니라 더 도움이 예제를 검토 한SQL Server JDBC에서 테이블 반환 매개 변수 사용
How to pass Table-Valued parameters from java to sql server stored procedure?
보여 Connection.prepareStatement
에서 SQLServerPreparedStatement
주조 객체를 얻는 예 모두 전화해서 setStructured
방법으로 전화하십시오. DBCP2와 같은 표준 연결 풀의 사용을 막지 않습니까?
stmt.setObject
방법을 사용할 수있을 말하는 다른 스택 오버플로 코멘트에서 코멘트주의 :
PreparedStatement의 캐스팅하는 대신를, 당신은 된 PreparedStatement에 SQLServerDataTable 인스턴스를 전달할 수 있습니다. setObject (int, Object) 메서드를 호출합니다. 이것은 dbo 스키마에 정의 된 TVP 유형에 적용됩니다. -이 시도 때 오류를 얻고, 유형 가 DBO 스키마에이지만 19시 18분
에서 allenru 7월 15일 ... 여기
Exception in thread "main" com.microsoft.sqlserver.jdbc.SQLServerException: The Table-Valued Parameter must have a valid type name.
내 코드는 다음과 같습니다
// JAVA
private static void tableParameters(DataSource ds) throws SQLException {
final String sql = "EXEC dbo.GetAccountsFromTable @accountIds=?";
final List<Integer> accountIds = generateIntegers(50, 1_000_000);
try (Connection conn = ds.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql))
{
SQLServerDataTable accounts = new SQLServerDataTable();
accounts.addColumnMetadata("item", java.sql.Types.INTEGER);
for (Integer aid : accountIds)
accounts.addRow(aid.toString());
stmt.setObject(1, accounts);
try (ResultSet rs = stmt.executeQuery())
{
while (rs.next()) {
System.out.println(rs.getInt(1));
}
}
}
}
-- TSQL
create type dbo.IntegerTable AS TABLE (item INT);
CREATE PROCEDURE dbo.GetAccountsFromTable(@accountIds dbo.IntegerTable READONLY)
AS
BEGIN
IF OBJECT_ID('tempdb..#AccountIds') IS NOT NULL
DROP TABLE #AccountIds
CREATE TABLE #AccountIds (id INTEGER)
INSERT INTO #AccountIds
SELECT * FROM @accountIds
SELECT * FROM #AccountIds
END
도움이나 조언을 주시면 감사하겠습니다. 감사!