вторник, 9 августа 2011 г.

SQL-ошибка: ORA-01747: invalid user.table.column, table.column, or columns specification

При использовании служебных слов в качестве имен полей можно получить ошибку ORA-01747: invalid user.table.column, table.column, or columns specification. Характерно для Oracle, возможно имеет место для других СУБД.

Пример:
select a.access from accessrights a

Дело в том, что 'access' является служебным словом, и приведенное SQL-выражение не выполнится. Выход из этой ситуации очень прост - использование кавычек.
select a."access" from accessrights a

UnsupportedOperationException

Столкнулся с UnsupportedOperationException при попытке вызова метода add() у объекта через ссылку типа List. Проблема оказалась в следующем: один из вызываемых методов присваивал этой переменной значение Collections.EMPTY_LIST, который является Immutable (т.е. неизменяемым) объектом, соответственно при попытке вызвать add() выбрасывается UnsupportedOperationException.
Очень кратко это выглядит так:

  1. List<Object> list = Collections.emptyList();
  2. list.add(new Object()); // здесь будет выброшено UnsupportedOperationException


P.S.  Collections.emptyList() и Collections.EMPTY_LIST отличаются только тем, что метод emptyList() является type-safety.