【问题标题】:Jmeter JDBC - Passing table valued parametersJmeter JDBC - 传递表值参数
【发布时间】:2020-11-29 21:52:34
【问题描述】:

在 Jmeter 上,我需要通过 JDBC 请求执行一个存储过程,其中一些要传递的参数是表(表值参数)。

我目前的方法是动态生成这些表参数(通过运行 SQL 查询,每个作为单独的 JDBC 请求),并作为参数传递给存储过程。

问题: 如何在 JDBC 请求中传递表值参数? 它的参数类型是什么?

【问题讨论】:

    标签: sql-server jdbc parameters jmeter


    【解决方案1】:

    搞定了!感兴趣的存储过程需要各种类型的参数 - 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();
    

    【讨论】:

      【解决方案2】:

      我认为 JDBC 请求采样器不够灵活,无法涵盖您的用例,您必须从 JSR223 Sampler 中选择 DelegatingPreparedStatement

      您可以从 JDBC 连接配置中获取连接,如下所示:

      def connection = org.apache.jmeter.protocol.jdbc.config.DataSourceElement.getConnection('your variable name of pool here')
      

      更多信息:

      【讨论】:

      • 谢谢,我要试试这个解决方案。我是否仍然能够使用来自多个其他 JDBC 请求的 ResultSet 并将它们作为参数(以编程方式)传递给 SQL 存储过程?
      猜你喜欢
      • 2015-05-24
      • 2020-09-29
      • 2012-09-26
      • 1970-01-01
      • 2017-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多