防止尝试存储比VARCHAR2数据库字段中容纳的更多文本的正确方法是什么?
假设REGISTRATIONS表的PARTNER_ROLE字段声明为VARCHAR2(80)。
此字段在Java中的Registration类中映射为
public class Registration {
@Column(name=”PARTNER_ROLE” length=”80”)
private String partnerRole;
}
但是,setPartnerRole()方法允许用户填充任意长度的字符串。仅当随后尝试插入或更新REGISTRATIONS记录时才会遇到此问题。甲骨文抱怨道。
处理这种情况的正确方法是什么?
答案 0 :(得分:0)
解决方案1:在UI端本身设置文本字段或文本区域中的字段长度限制,该字段长度限制为PARTNER_ROLE输入。也可以进行javascript检查。
解决方案2:有点糟糕的解决方案。使用java.sql.DatabaseMetaData类检入DB端。如果需要多次检查多个字段,那就不好了。
java.sql.DatabaseMetaData
类提供有关表的数据,如column_size,type_name等。例如:
ResultSet rsColumns = null;
DatabaseMetaData meta = conn.getMetaData();
rsColumns = meta.getColumns(null, null, "aTableName", null);
其中aTableName是要研究的名称。使用特定tableName.columnName的column_size检查输入值长度。
答案 1 :(得分:0)
您可以使用JSR-303 Bean Validation注释来注释具有最大长度的字段,然后您可以使用验证器来检查是否满足这些注释,例如当调用setter时这也可以用来自动为您提供有意义的错误消息。
public class Registration {
@Size(max = 80)
@Column(name=”PARTNER_ROLE” length=”80”)
private String partnerRole;
// you need to get this from somewhere, but this depends on your environment
private ValidatorFactory validatorFactory;
public Set<ConstraintViolation<Registration>> validate() {
Validator validator = validatorFactory.getValidator();
return validator.<Registration>validate(this);
}
}