美文网首页我爱编程软件测试学习之路
PL/SQL 中获取CLOB字段的具体内容

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

作者: 乘风破浪的姐姐 | 来源:发表于2018-06-21 11:30 被阅读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

    相关文章

      网友评论

        本文标题:PL/SQL 中获取CLOB字段的具体内容

        本文链接:https://www.haomeiwen.com/subject/xfvbsftx.html