首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Benshell采样器更新Oracle请求抛出错误

Benshell采样器更新Oracle请求抛出错误
EN

Stack Overflow用户
提问于 2021-09-19 11:37:03
回答 2查看 44关注 0票数 0

我试图运行一个循环,通过一个bean shell采样器在oracle数据库中创建记录,它正在抛出错误,

代码语言:javascript
复制
Response code:500
Response message:org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval   Sourced file: inline evaluation of: ``import java.sql.*; import oracle.jdbc.*; import org.apache.jmeter.protocol.jdbc. . . . '' : Error in method invocation: Method setString( int, java.lang.String ) not found in class'org.apache.commons.dbcp2.DelegatingStatement' 

请求的脚本:

代码语言:javascript
复制
import java.sql.*;
import oracle.jdbc.*;
import org.apache.jmeter.protocol.jdbc.config.DataSourceElement;

ResultSet rs = null;
ResultSetMetaData rsmd = null;
PreparedStatement pstmt = null;

Connection conn = DataSourceElement.getConnection("IMPACTConnectionPrerequisitsII");
String Query = "DECLARE \n" 
           + "j number(4) \n"
           + "BEGIN \n"
           + "FOR j in 11 .. 12 LOOP \n"
           + "INSERT INTO FWA_STAGE_TU \n"
           + "(ID,EXT_ID,BATCH_NO,OPERATION,BLOCK_ROLL_UP_LAST_RECORD,LAST_UPDATED_DATE,ERROR_FLAG,TRIAL_NO,TRIAL_ALIAS_CODE, \n"
            + "COUNTRY_CODE,DISPLAY_UNIT_NO,GROUP_NO,TRIAL_UNIT_REFERENCE,PRIMARY_INVESTIGATOR,PRIMARY_CENTRE,OCATION_NO, \n"
            + "PURPOSE_CODE,MANAGING_MED_UNIT_CODE,UPDATING_MED_UNIT_CODE,FINANCE_MED_UNIT_CODE,PATIENTS_ALL_SET_UP_FLAG, \n"
            + "PATIENT_MONITORING_FLAG,COMMENTS,CONFIRMED_FLAG,CONFIRMED_BY,CONFIRMED_DATE,ROLLUP_ROLLDOWN_PLANNED_FIGS, \n"
            + "DOC_COLLECTION_INDICATOR,VALIDATED_PAT_CAP,MAXIMUM_PAT_CAP,PREFERRED_LANGUAGE_CODE,NEW_DISPLAY_UNIT_NO, \n"
            + "TOTAL_OPEN_DCF_ISSUES_NO,ORDER_INTERVAL,ORDER_INTERVAL_UNITS,DATA_SOURCE_CODE,RANK_SEQ) \n"
            + "VALUES (j, 1, 10, 'I', NULL, SYSDATE, 'N', 102922, 'TESTTRIAL4', 'BEL', \n"
           + "j, NULL, 'BELTU'||j, 130262, 124236, NULL, 'PATTR', 'FP', 'FP', 'FP', 'N', 'Y', 'TESTTU'||j, \n"
           + "'Y', 999999, SYSDATE, NULL, 'P', 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL) \n"
           + "END LOOP \n"
           + "END";

pstmt = conn.prepareStatement(Query);
Statement stmt = conn.createStatement();
try {
    stmt.setString(1, "123456");
    stmt.registerOutParameter(2, OracleTypes.CURSOR);
    stmt.executeUpdate();
}
catch(Throwable ex) {
    log.error("Error message: ", ex);
    throw ex;
}
finally {
    if (rs != null) {
        rs.close();
    }
    if (stmt != null) {
        stmt.close();
    }
    if (conn != null) {
        conn.close();
        log.info("!!!! Connection closed to database !!!!");
    }
}

JDBC配置:

这个查询在SQL Developer工具上运行得很好。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-19 12:11:41

同意这个评论,你的trycatchfinally块应该是这样的,rest看起来不错。

代码语言:javascript
复制
try {
    pstmt = conn.prepareStatement(Query);
    pstmt.executeUpdate();
}
catch(Throwable ex) {
    log.error("Error message: ", ex);
    throw ex;
}
finally {
    if (rs != null) {
        rs.close();
    }
    if (pstmt != null) {
        pstmt.close();
    }
    if (conn != null) {
        conn.close();
        log.info("!!!! Connection closed to database !!!!");
    }
票数 0
EN

Stack Overflow用户

发布于 2021-09-19 11:45:03

您应该使用PreparedStatement,删除以下行:

代码语言:javascript
复制
 Statement stmt = conn.createStatement();

并将准备好的语句分配给stmt

代码语言:javascript
复制
stmt = conn.prepareStatement(Query);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69242871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档