Здесь было много полезных ответов, в целом достигающих высшей точки в два пункта.
BACKTICKS(
) `используются вокруг имен идентификаторов. QUOTES(')
используются вокруг значений. И как @MichaelBerkowski сказал
Backticks должны использоваться для идентификаторов таблиц и столбцов, но необходимы только тогда, когда идентификатор является
blockquote>MySQL
зарезервированным ключевое слово или когда идентификатор содержит символы пробела или символы за пределами ограниченного набора (см. ниже) Часто рекомендуется избегать использования зарезервированных ключевых слов в качестве идентификаторов столбцов или таблиц, если это возможно, во избежание проблемы с кавычками.Существует случай, когда идентификатор не может быть зарезервированным ключевым словом или содержать символы whitespace или за пределами ограниченного набора , но обязательно требует обратных ссылок вокруг их.
ПРИМЕР
123E10
является допустимым именем идентификатора, а также действительнымINTEGER
литералом.[Не вдаваясь в подробности, как вы могли бы получить такое имя идентификатора] Предположим, что я хочу создать временную таблицу с именем
123456e6
.Нет ОШИБКИ на обратных циклах.
DB [XXX]> create temporary table `123456e6` (`id` char (8)); Query OK, 0 rows affected (0.03 sec)
ОШИБКА, если вы не используете обратные ссылки.
DB [XXX]> create temporary table 123451e6 (`id` char (8)); ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '123451e6 (`id` char (8))' at line 1
Однако
123451a6
[* g15]DB [XXX]> create temporary table 123451a6 (`id` char (8)); Query OK, 0 rows affected (0.03 sec)
Это полностью, потому что
1234156e6
также является показательным номером.
Похоже, вы пытаетесь ввести TextField
в статическое поле. Что-то вроде
@FXML
private static TextField myTextField ;
Это, по-видимому, работало в JavaFX 2.2. Он не работает в JavaFX 8. Поскольку ни одна официальная документация никогда не поддерживала это использование, это на самом деле не нарушает обратную совместимость, хотя, с полным основанием, документация о том, что делает FXMLLoader
, довольно горькая.
На самом деле не имеет смысла делать статические поля @FXML
-injected. Когда вы загружаете файл FXML, он создает новые объекты для каждого из элементов в файле FXML. Новый экземпляр контроллера связан с каждым вызовом FXMLLoader.load(...)
, а поля в экземпляре этого контроллера вводятся соответствующими объектами, созданными для элементов FXML. Таким образом, введенные поля обязательно специфичны для экземпляра контроллера. Если у вас были статические введенные поля в контроллере, и вы дважды загрузили один и тот же файл FXML и дважды отображали его в пользовательском интерфейсе, тогда у вас не было бы способа ссылаться на оба набора элементов управления.
Обновление: ответ на вопрос в комментариях
В частности, не используйте статические поля, чтобы они могли быть доступны извне класса. Статическое поле имеет одно значение, принадлежащее классу, вместо значения для каждого экземпляра класса, и решение о создании полей static должно выполняться только в том случае, если это имеет смысл. Другими словами, static
определяет область scope , а не доступность . Чтобы разрешить доступ к данным экземпляра, вам просто нужно иметь ссылку на экземпляр. FXMLLoader
имеет метод getController()
, который позволяет вам получить ссылку на контроллер.
Связанная точка: также не рекомендуется отображать элементы управления пользовательского интерфейса от контроллера. Вместо этого вы должны предоставить данные. Например, вместо определения метода getTextField()
в контроллере вместо этого определите метод textProperty()
, который возвращает StringProperty
, представляющий содержимое TextField
. Причина этого в том, что, когда ваш босс приходит в офис и говорит вам, что он хочет заменить TextField
на TextArea
или ComboBox<String>
или на какой-то другой элемент управления, тогда это будет намного сложнее если классы вне контроллера используют ваш TextField
. Структура данных, представленных вашим контроллером, гораздо реже изменяется, чем реализация того, как эти данные представляются пользователю.
Для некоторых примеров