2013-08-05 20 views
1

Я работаю с базой данных Firebird в Java. Все работает нормально, но у меня проблема с подключением к моей базе данных, если путь к файлу базы данных содержит национальные символы, например. «á» или «č».Jaybird/JDBC + Национальные символы в пути

Sample исключение:

org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544344. I/O error during "CreateFile (open)" operation for file "Z:/testing/á/sample.fdb" 

Путь является правильным, база данных существует. Jaybird/JDBC имеет проблему с символом «á» в пути.

Любые идеи, как исправить это или где проблема? Спасибо за все ответы.

ОС: Windows 7 Pro 64 бит
JDK: 1.7.0.25
Jaybird: 2.2.3

ответ

2

Текущая версия JayBird имеет ограниченную поддержку специальных символов в DatabaseName. Есть несколько вариантов, которые можно использовать для решения этой проблемы, но если они действительно работают, это сильно зависит от версии Firebird и стандартного набора символов ОС (где работает Firebird).

Вариант 1: использовать свойство связи filename_charset=<name of charset> где <name of charset> - это набор символов по умолчанию для операционной системы, в которой работает сервер Firebird.

Например:

jdbc:firebirdsql://myserver/mydatabase?filename_charset=Cp1252 

Вариант 2 (Firebird 2.5 или выше): использовать обходной путь, описанный в JDBC-251:

Запустить приложение Java с -Dfile.encoding=UTF8 и включают utf8_filename=1 в соединительной URL:

jdbc:firebirdsql://myserver/mydatabase?utf8_filename=1 

При использовании этой опции убедитесь, что вы уже указали символы соединения t с использованием свойства соединения charSet, localEncoding или local_encoding (для имен символов символов Java) и/или encoding или lc_ctype (для имен наборов символов Firebird). Если нет, вы используете набор символов Firebird NONE, который использует набор символов по умолчанию JVM, и вам нужно будет установить charSet в стандартную кодировку JVM по умолчанию для предотвращения проблем с преобразованием набора символов из-за измененного значения file.encoding (в некоторых случаях - в дополнение к указанию charSet - вы также можете явно установить encoding в NONE).

Вариант 3: Определить псевдоним только с символами ASCII в aliases.conf Жар-птицы сервера для базы данных и подключения с помощью этого псевдонима вместо:

jdbc:firebirdsql://myserver/thealias 

Раскрытие: Я один из разработчиков JayBird

+0

Спасибо. Вариант 2 работает. :) – lukasic

+1

@ LukášKasič Убедитесь, что вы указываете набор символов соединения, в противном случае это изменение может привести к неожиданным преобразованиям символов, поскольку оно будет использовать набор символов соединения «NONE», который использует кодировку по умолчанию для JVM для преобразования. –

+0

приятно знать, еще раз спасибо. Ты спас меня не менее 2 часов. – lukasic