Как обеспечить ограничение размера поля БД для связанной строки Java? - PullRequest
1 голос
/ 30 апреля 2010

Как правильно защищаться от попыток сохранить больше текста, чем можно разместить в поле базы данных VARCHAR2?

Скажем, поле PARTNER_ROLE таблицы REGISTRATIONS объявлено как VARCHAR2 (80).

Это поле отображается в классе регистрации в Java как

public class Registration {
  @Column(name=”PARTNER_ROLE” length=”80”)
  private String partnerRole;
}

Однако метод setPartnerRole () позволяет пользователю вставлять строку любой длины. Проблема возникает только тогда, когда кто-то впоследствии пытается вставить или обновить запись REGISTRATIONS. Оракул жалуется.

Как правильно справиться с этой ситуацией?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2010

Вы можете использовать аннотации JSR-303 Bean Validation для аннотирования поля максимальной длиной, а затем вы можете использовать валидатор для проверки того, что эти аннотации выполнены, например, когда сеттер вызывается. Это также может быть использовано для автоматического предоставления значимых сообщений об ошибках.

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);
  }
}
0 голосов
/ 30 апреля 2010

Решение 1. На самой стороне пользовательского интерфейса задайте ограничение длины поля в текстовом поле или текстовой области, которое принимает данные для PARTNER_ROLE. Также можно выполнить проверку JavaScript.

Решение 2: немного паршивое решение. Проверьте на стороне БД, используя класс java.sql.DatabaseMetaData. Не подходит, если нужно несколько раз проверить несколько полей.

java.sql.DatabaseMetaData класс предоставляет данные о таблице, такие как column_size, type_name и т. Д. Например:

 ResultSet rsColumns = null;
    DatabaseMetaData meta = conn.getMetaData();
    rsColumns = meta.getColumns(null, null, "aTableName", null);

где aTableName - это тот, который должен быть изучен. Проверьте длину входного значения с column_size этого конкретного tableName.columnName.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...