Получить ошибку при подключении к базе данных Firebird

Springboot: pom.xml org.firebirdsql.jdbc jaybird 4.0.0.java8

приложение.свойства

spring.datasource.url=jdbc:firebirdsql://SERVER:3050/D:\company\DbPro\Data\file.fdb
spring.datasource.driverClassName=org.firebirdsql.jdbc.FBDriver

Я получаю сообщение об ошибке при запросе базы данных:

Ошибка запроса базы данных. Причина: org.springframework.jdbc.CannotGetJdbcConnectionException: не удалось получить соединение JDBC; вложенным исключением является java.sql.SQLException: ошибка ввода-вывода во время операции «CreateFile (open)» для файла «D:companyDbProDatafile.fdb»; Ошибка при попытке открыть файл; [SQLState: 08001, код ошибки ISC: 335544344]

Что случилось?


person Andrey Konus    schedule 10.06.2020    source источник
comment
Связанный, технически дублированный: обратная косая черта свойств Java (я решил не использовать свой золотой молоток для закрытия, потому что я также предоставьте альтернативу Firebird в моем ответе)   -  person Mark Rotteveel    schedule 10.06.2020


Ответы (1)


Как показано в сообщении об ошибке, Firebird пытается подключиться к несуществующей базе данных D:companyDbProDatafile.fdb (или недоступной по другим причинам).

Причина, по которой ваш путь неверный, заключается в том, что \ обозначает побег в файле свойств. Как описано в Properties.load:

  • Метод не рассматривает символ обратной косой черты \ перед недопустимым escape-символом как ошибку; обратная косая черта молча опускается. Например, в строке Java последовательность \z вызовет ошибку времени компиляции. Напротив, этот метод молча отбрасывает обратную косую черту. Таким образом, этот метод обрабатывает последовательность из двух символов \b как эквивалентную одному символу 'b'.

Чтобы исправить это, обязательно используйте двойную обратную косую черту или вместо нее используйте прямую косую черту. Так что используйте:

spring.datasource.url=jdbc:firebirdsql://SERVER:3050/D:\\company\\DbPro\\Data\\file.fdb

or

spring.datasource.url=jdbc:firebirdsql://SERVER:3050/D:/company/DbPro/Data/file.fdb

В качестве альтернативы вместо указания пути к базе данных настройте псевдоним в databases.conf (Firebird 3 и выше) или aliases.conf (Firebird 2.5 и ниже) и укажите псевдоним в строке подключения вместо пути.

person Mark Rotteveel    schedule 10.06.2020
comment
@AndreyKonus Если мой ответ решил вашу проблему, примите ответ, нажав на галочку. - person Mark Rotteveel; 10.06.2020
comment
because the path is invalid, ну, технически этот путь вполне верный, но на практике он настолько случайный, что... бегите как черти!!! :-D Но действительно так. - person Arioch 'The; 11.06.2020
comment
@Arioch'The Сомнительно, действителен ли путь D:companyDbProDatafile.fdb без обратной косой черты после буквы диска. - person Mark Rotteveel; 11.06.2020
comment
@MarkRotteveel, если вы не отменяете стандарты ОС своим собственным специальным определением (и вы не сказали, что делаете), то это не вызывает сомнений, это правильный путь. Файл или папка companyDbProDatafile.fdb помещается внутрь текущей папки диска D: - person Arioch 'The; 11.06.2020
comment
@Arioch'The У вас есть ссылка на это, потому что, насколько мне известно, такое поведение существует только в командной строке и только для совместимости с DOS. - person Mark Rotteveel; 11.06.2020
comment
@MarkRotteveel это определенно из-за наследия CP / M (даже не DOS), но наследие не является синонимом недействительности. Первая ссылка в Microsoft Bing: если имя файла начинается только с обозначения диска, а не с обратной косой черты после двоеточия, оно интерпретируется как относительный путь к текущему каталогу на диске — это всего лишь один вариант из множества других возможных вариантов построения. имена файлов в docs.microsoft.com/en-us/ windows/win32/fileio/название-файла - person Arioch 'The; 12.06.2020