...
- ScalikeJDBC - библиотека для работы с реляционными БД в Scala
- Документация: http://scalikejdbc.org/
- Презентация: Scalikejdbc.pptx
- SCOPT - библиотека по разбору командной строки
- Документация: https://github.com/scopt/scopt
Пример использования (из пакета org.mai.dep810dep210.scala.iris в проекте )
Блок кода language java title Объект с описанием структуры командной строки collapse true //Объект. в котором описана структура конфигурации командной строки case class Config ( commandLoad: String = "", commandClear: String = "", commandInit: String = "", file: String = "", append: Boolean = false, dropTables: Boolean = false, forse: Boolean = false )
Блок кода language java title Логика разбора командной строки collapse true // парсер определяет логику разбора командной строки val parser = new OptionParser[Config]("IrisLoader") { // название утилиты при распечатке head("IrisLoader", "1.0") //обрабатывает команду load и нужные команде аргументы --file и --append cmd("load") .action((_, c) => c.copy(commandLoad = "load")) //копируем команду в объект конфигурации .text("Load - это команда загрузки данных из файла") //описание команды .children( // разбор сопутствующих аргументов opt[String]("file") // проверяем наличие аргумента --file. Должен иметь тип String .required() // аргумент обязателен .action((f, c) => c.copy(file = f)) // при наличии копируем в объект конфигурации .text("Путь к файлу с данными"), // описание аргумента opt[Unit]("append") // аргумент без значения (флаг) --append .abbr("a") // сокрщённая форма -a .action((f, c) => c.copy(append = true)) // при наличии копируем в объект конфигурации .text("Не удалять данные при загрозке. По умолчанию данные будут перезатираться") // описание аргумента ) cmd("clean") .action((_, c) => c.copy(commandClear = "clean")) .text("Удалить данные из базы данных") .children( opt[Unit]("dropTables") .abbr("dt") .action((_, c) => c.copy(dropTables = true)) .text("Удалить таблицы") ) cmd("init") .action((_, c) => c.copy(commandInit = "init")) .text("Создать таблицы") .children( opt[Unit]("forse") .abbr("f") .action((_, c) => c.copy(forse = true)) .text("Пересоздать таблицы, если существуют") ) // дополнительные проверки целостности команд // в данном случае проверяем, что задана хотя бы одна команда checkConfig{c=> if(c.commandInit.isEmpty && c.commandLoad.isEmpty && c.commandClear.isEmpty) failure("Нужно указать хотя бы одну комманду") else success } }
Блок кода language java title Использование collapse true // Разбор командной строки и реализация логики приложения в зависимости от командной строки parser.parse(args,Config()) match { case Some(config) => DBs.setup(irisDB) if(!config.commandClear.isEmpty) { if(config.dropTables) { dropTables } else { clearData } } if(!config.commandInit.isEmpty) { if(config.forse) { dropTables } createTables } if(!config.commandLoad.isEmpty) { if(!config.append) { clearData } loadIrisToDB(IrisParser.loadFromFile(config.file)) } DBs.closeAll() case None => // если командная строка не соответствует логике описанной в парсере // будет распечатана справка по использованию приложения }
...