修改列属性(类型兼容)

最后更新:2023-10-18 19:53:27 | 状态:未完成
=============================表中没有数据的情况 一般可以正常修改 但部分数据库有些类型之间不可修改=================================================================
Column column = new Column();
column.setTable("A_TEST");
column.setName("A_CHAR");
column.setTypeName("int");//没有数据的情况下修改数据类型
column.setPrecision(0);
column.setScale(0);
column.setDefaultValue("1");
//添加新列
log.warn("添加列");
service.ddl().save(column);

=============================表中有数据的情况 可能造成值类型不兼容=================================================================

//ConfigTable.AFTER_ALTER_COLUMN_EXCEPTION_ACTION
// 0:中断执行
// 1:直接修正
// n:行数<n时执行修正  >n时触发另一个监听(默认返回false)

Column column = new Column();
column.setTable("A_TEST");
column.setName("A_CHAR");
column.setTypeName("varchar(50)");
//添加 新列
service.ddl().save(column);

//表中有数据的情况下
DataRow row = new DataRow();
//自增列有可能引起异常
try {
row.put("ID", BasicUtil.getRandomNumber(0, 100000));
row.put("A_CHAR", "123A");
row.setIsNew(true);
service.save("A_TEST", row);
}catch (Exception e){
log.error(e.getMessage());
}
try {
row = new DataRow();
row.put("A_CHAR", "123A");
service.save("A_TEST", row);
}catch (Exception e){
log.error(e.getMessage());
}
log.warn("表中有数据的情况下修改列数据类型");
column = new Column();
column.setTable("A_TEST");
column.setName("A_CHAR");
//这一列原来是String类型 现在改成int类型
//如果值不能成功实现殷式转换(如123A转换成int)会触发一次默认的DDListener.afterAlterException
//如果afterAlterException返回true,会再执行一次alter column如果还失败就会抛出异常
//如果不用默认listener可以column.setListener
column.setTypeName("int");
column.setPrecision(0);
service.ddl().save(column);

最近更新 搜索 提交