最近接了一个需求要造数据但是不同的场景下对应数据落入的表却又不同,当时想了很多办法后来觉得这个办法最好记录一下
思路:
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.兼容不同字段略,不同场景下需根据场景实现
该博客介绍了一种处理不同场景下数据表字段差异的方法。首先,分析了各表的通用字段和类型,然后封装了这些字段,并通过JDBC获取表结构生成插入SQL语句。虽然内容未详述不同字段的兼容处理,但提供了基础框架和思路,适用于需要动态处理数据库字段的场景。
1939

被折叠的 条评论
为什么被折叠?



