【发布时间】:2020-11-29 21:52:34
【问题描述】:
在 Jmeter 上,我需要通过 JDBC 请求执行一个存储过程,其中一些要传递的参数是表(表值参数)。
我目前的方法是动态生成这些表参数(通过运行 SQL 查询,每个作为单独的 JDBC 请求),并作为参数传递给存储过程。
问题: 如何在 JDBC 请求中传递表值参数? 它的参数类型是什么?
【问题讨论】:
标签: sql-server jdbc parameters jmeter
在 Jmeter 上,我需要通过 JDBC 请求执行一个存储过程,其中一些要传递的参数是表(表值参数)。
我目前的方法是动态生成这些表参数(通过运行 SQL 查询,每个作为单独的 JDBC 请求),并作为参数传递给存储过程。
问题: 如何在 JDBC 请求中传递表值参数? 它的参数类型是什么?
【问题讨论】:
标签: sql-server jdbc parameters jmeter
搞定了!感兴趣的存储过程需要各种类型的参数 - UUID、布尔值、字符串和表值参数。
为每个表值参数创建一个新的 SQLServerDataTable,并从 JDBC 请求的“结果变量名称”提供数据。
String ConnStr = "jdbc:sqlserver://<servername>;databaseName=<DBname>;integratedSecurity=true;"
Connection connection = DriverManager.getConnection(ConnStr);
String sql = "EXEC dbo.prInsertUpdateEntity ?,?,?,?,?,?";
UUID VCID = UUID.fromString("842a50d9-4091-4c8f-9f04-a853356c7b29");
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setObject(1,VCID);
stmt.setBoolean(2,true);
stmt.setString(3,"Username");
((SQLServerPreparedStatement) stmt).setStructured(4,"dbo.Termtype",TT);
((SQLServerPreparedStatement) stmt).setStructured(5,"dbo.Descriptortype",Desc);
((SQLServerPreparedStatement) stmt).setStructured(6,"dbo.SemanticType",ST);
ResultSet rs = stmt.executeQuery();
【讨论】:
我认为 JDBC 请求采样器不够灵活,无法涵盖您的用例,您必须从 JSR223 Sampler 中选择 DelegatingPreparedStatement
您可以从 JDBC 连接配置中获取连接,如下所示:
def connection = org.apache.jmeter.protocol.jdbc.config.DataSourceElement.getConnection('your variable name of pool here')
更多信息:
【讨论】: