我爱编程软件测试学习之路

PL/SQL 中获取CLOB字段的具体内容

2018-06-21  本文已影响13人  乘风破浪的姐姐

经常会遇到表中的字段定义的数据类型为clob,如下图,request_param字段是clob类型存储的是一个json格式的报文。


image.png

oracle中的clob类型字段不能直接显示出来,那么想要获取上述clob里的具体内容,该怎么处理呢?

借助Oracle系统dbms_lob中substr方法
格式为:select dbms_lob.substr(clobField) from table


image.png

但是使用上述方法会存在一个问题:字段里存储的报文过长时,会显示不全。
所以就需要其他方多处理,这里使用java连接oracle,写了一个方式,只需要传递一个参数,即select clobField from table的结果即可。
pom.xml文件中加入连接数据库所需包:

     <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.3.0</version>
        </dependency>

创建数据连接类 DbcpConnection

package com.cccis.jmeter.util.help;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
 * Created by  Sundy on 2018/6/21.
 */
public class DbcpConnection{
    //数据库驱动名字
    private static String jdbcName = "oracle.jdbc.driver.OracleDriver";
    //数据库协议地址
    private static String dbUrl = "jdbc:oracle:thin:@192.168.200.25:1521:orcl";
    //数据库用户名
    private static String dbUser = "apd_v362_test";
    //数据库密码
    private static String dbPassword = "apd_v362_test";

    public DbcpConnection(){}
    public static Connection getConnection(){
        Connection conn =null;
        try {

            Class.forName(jdbcName);
            conn = DriverManager.getConnection(dbUrl, dbUser, dbPassword);
        } catch (SQLException e) {
            e.printStackTrace();
        }catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return conn;
    }
}

新增DBUtil工具类:

package com.cccis.jmeter.util.help;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.Reader;
import java.sql.*;


/**
 * Created by Sundy on 2018/6/21.
 */
public class DBUtil {

    public static String ClobConvert(String sql)  {

        Connection conn = DbcpConnection.getConnection();
        PreparedStatement pstmt = null;
        String result=null;
        try {
            pstmt = conn.prepareStatement(sql);
            ResultSet rs = pstmt.executeQuery();
            while (rs.next()) {
                Clob clob = (Clob) rs.getObject(1);
                result = ClobToString(clob);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return result;
    }

    public static String ClobToString(Clob clob)  {
        String reString = "";
        try {
            Reader is = null;// 得到流
            is = clob.getCharacterStream();
            BufferedReader br = new BufferedReader(is);
        String s = br.readLine();
        StringBuffer sb = new StringBuffer();
        while (s != null) {// 执行循环将字符串全部取出付值给StringBuffer由StringBuffer转成STRING
            sb.append(s);
            s = br.readLine();
        }
        reString = sb.toString();
        } catch (IOException e) {
            e.printStackTrace();
        }catch (SQLException e) {
            e.printStackTrace();
        }
        return reString;
    }

    public static void main(String[] args) {
        String ss = null;
        ss = ClobConvert("select  request_param  from t_interface_log l where l.business_no='CN062114485333' and l.interface_code='ClaimInfoSync'");
        System.out.println(ss);
    }

}

上述测试结果为:


image.png

ok了,成功将数据库中clob字段的具体内容取出。

后续可以在jmeter接口测试时,将上述工程打包后,在BeanShell内直接调用。例如:


image.png
上一篇下一篇

猜你喜欢

热点阅读