自动化测试插入数据兼容多表设计

该博客介绍了一种处理不同场景下数据表字段差异的方法。首先,分析了各表的通用字段和类型,然后封装了这些字段,并通过JDBC获取表结构生成插入SQL语句。虽然内容未详述不同字段的兼容处理,但提供了基础框架和思路,适用于需要动态处理数据库字段的场景。

最近接了一个需求要造数据但是不同的场景下对应数据落入的表却又不同,当时想了很多办法后来觉得这个办法最好记录一下

思路:

step1.分析各个表的通用字段及字段类型:

step2 :封装通用字段:

step3 兼容不同表字段:

实现:

创建一个接收各个字段的bean类:

import lombok.Data;
import org.jetbrains.annotations.NotNull;

/**
 * @author hwatu
 * @version V1.0
 * @Title: TseAutoTest
 * @Package com.bwton.autotest.tseautotest.bean
 * @date 2022/4/21 7:33 下午
 */
@Data
public class ColumnData implements Comparable<ColumnData> {

    // 字段名称
    private String name; 
    // 字段类型
    private int type; 
    // 字段类型名称
    private String typeName; 
    // 值
    private String value; 

    public ColumnData(String columnName, int valueType, String typeName) {
        this.name = columnName;
        this.type = valueType;
        this.typeName = typeName;
    }

    @Override
    public int compareTo(@NotNull ColumnMetaData o) {
        return 0;
    }
}

2.通过JDBC 获取各个表的字段组长sql语句:

    public static String getInsertSql(String tableName, int size) {
        JdbcTemplate = JdbcTemplateUtils.getPayJdbcTemplate();
        String sql = String.format("SELECT * FROM dbName.%s LIMIT 0 ;", tableName);
        SqlRowSet srcSqlRowSet = JdbcTemplate.queryForRowSet(sql);
        columneMetaList.clear();
        int columnCount;
        SqlRowSetMetaData sqlRowSetMetaData = srcSqlRowSet.getMetaData();
        columnCount = sqlRowSetMetaData.getColumnCount();
        for (int index = 0; index < size; index++) {
            List<ColumnMetaData> columnMetaData = new ArrayList<>();
            for (int i = 1; i <= columnCount; i++) {
                //获取字段的名称、类型和描述
                columnMetaData.add(new ColumnMetaData(sqlRowSetMetaData.getColumnName(i), sqlRowSetMetaData.getColumnType(i), sqlRowSetMetaData.getColumnTypeName(i)));
            }
            columneMetaList.add(columnMetaData);
        }
        StringBuilder channelSqlBuilder = new StringBuilder("INSERT INTO dbName." + tableName + " (");
        StringBuilder values = new StringBuilder(" (");
        for (int i = 0; i < columneMetaList.get(0).size(); i++) {
            ColumnMetaData columnMetaData = columneMetaList.get(0).get(i);
            if (i < columneMetaList.get(0).size() - 1) {
                channelSqlBuilder.append(columnMetaData.getName() + ",");
                values.append("?,");
            } else {
                channelSqlBuilder.append(columnMetaData.getName() + ") VALUES ");
                values.append("?);");
            }
        }

        String channelSql2 = channelSqlBuilder
                .append(values).toString();
        System.out.println(channelSql2);
        return channelSql2;

    }

3.兼容不同字段略,不同场景下需根据场景实现

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值