Учёт семян

Java (11), JavaFX (Многодокументный интерфейс с вкладками), СУБД Apache Derby

Идея создания такого приложения полностью принадлежит моей жене. Она, в качестве хобби, выращивает помидоры, перцы (это её любимое) и прочие растения. Покупает пакетики с семенами и выращивает по несколько кустов каждого сорта. Часто семена из пакетика остаются, часто сорт покупается, но посадить их в этом сезоне не получается. Мы же программисты, а не фермеры, и площадь для выращивания помидоров у нас очень небольшая.

Так вот, пакетиков с семенами набралось уже несколько тысяч, и они требуют компьютерного учёта. Использовать электронную таблицу не получается: только фото растений занимают более 10 Гб. Электронная таблица с этим справляется, но очень медленно работает. Вот она и придумала программу, которая поможет вести учёт этих тысяч пакетиков.

А мне нужно попрактиковаться с БД (Apache Derby), попробовать разработку нового типа UI (Многодокументный интерфейс с вкладками), попробовать новый пакет (JavaFX) и придумать, как сделать такую программу, уложившись в несколько сотен строк. При этом лаконичность кода программы не должна достигаться за счёт упрощения UI и необходимой функциональности.

Для разработки использован Eclipse. Проект расположен здесь: https://github.com/weekend-game/seedkeeper/ (EN) и здесь: https://gitflic.ru/project/weekend-game/seedkeeper/ (RU).

Как запустить программу

Скачайте репозиторий на свой компьютер. Всё необходимое для работы программы расположено в папке app. Зайдите в папку app и запустите программу двойным кликом по SeedKeeper.jar или, если она не запускается, двойным кликом по SeedKeeper.bat. Если и последнее не запускает программу, то скачайте и установите Java 11 или новее и снова попробуйте способы, описанные выше.

Как открыть проект в Eclipse

В Eclipse, в меню выберите File - Import... В появившемся окне выберите Existing Projects into Workspace. Укажите папку скачанного вами репозитория и нажмите кнопку Finish. Проект откроется в Eclipse. В Package Explorer (в левой части экрана) дважды кликните на файле SeedKeeper.java. Файл откроется для редактирования (в центральной части экрана). Запустите программу на выполнение, нажав Ctrl+F11 или так, как вам удобно запускать программы в Eclipse.

СУБД

Выбор СУБД

При выборе СУБД я исходил из следующего:

  • СУБД должна позволять встраивать себя в приложение. Запуск каких-либо дополнительных программ перед работой с моим приложением несколько снижал бы удовольствие, получаемое пользователем от просмотра его коллекции семян.
  • Моя программа написана на Java, и СУБД должна быть написана на Java. Конечно, совместно с Java можно заставить работать что угодно, но не хочется тратить на это время.
  • Я знаю SQL и хотел бы использовать именно его, а не нечто иное, а значит, СУБД должна быть реляционной.
  • Следует использовать первую попавшуюся СУБД, удовлетворяющую моим первым трём требованиям, поскольку моя цель - сделать программу учёта семян, а не ознакомиться с текущим состоянием рынка СУБД.

Выбор пал на Derby. На сайте Derby можно найти большое количество качественной документации по этой СУБД. Но для создания приложения учёта семян понадобилось следующее.

Установка Derby требует:

  • Скачать и разместить в какой-нибудь папке файлы СУБД. Я работаю под Windows 10, использую Java 11, поэтому выбор пал на версию 10.15.2.0, которую я скачал и разместил в папке C:\Programs\Derby\
  • Создать системную переменную DERBY_HOME с указанием пути к СУБД. Я указал: C:\Programs\Derby.
  • В системную переменную PATH следует добавить к уже имеющемуся %DERBY_HOME%\bin.

Создание и работа с базой данных

  • Запустите командную строку в папке, где предполагается разместить базу данных. В репозитории для этого предназначен файл dos.bat
  • Запустите утилиту Derby ij. Для этого следует ввести: java -jar "%DERBY_HOME%/lib/derbyrun.jar" ij
  • Создайте или подключитесь к БД db. Для этого следует ввести: CONNECT 'jdbc:derby:db;user=user;create=true';
  • Запустите скрипт создания таблиц. Для этого следует ввести: RUN 'create_tables_1.sql';
  • затем: RUN 'create_tables_2.sql';
  • затем: RUN 'create_tables_3.sql';
  • В этом месте можно набирать любые SQL-команды, и они будут выполнены СУБД.
  • Выйдите из утилиты Derby ij. Для этого следует ввести: EXIT;

Не забудьте указывать ; после каждой команды.

Работа приложения с БД будет основана на использовании JDBC. Использовать ORM, например Hibernate, не вижу смысла для столь простого приложения, которое будет использовать не более десятка таблиц.