//Параметры соединения с базой
Properties connInfo=new Properties();
connInfo.put("user", username);
connInfo.put("password", password);
connInfo.put("charSet", "Cp1251");
//Устанавливаем соединение
Connection db=DriverManager.getConnection(dataurl, connInfo);
wrapper.env=NLS_LANG=American_America.CL8KOI8R
Информацию об этом прислал Сергей Безруков, за что ему отдельное спасибо.
//Параметры соединения с базой
Properties connInfo = new Properties();
//Кодировка Cp866
connInfo.put("charSet", "Cp866");
connInfo.put("CODEPAGEID", "66");
//Устанавливаем соединение
Connection db=
DriverManager.getConnection("jdbc:DBF:/C:/MyDBFFiles",connInfo);
Если у Вас DBF-файлы формата FoxPro, то у них своя специфика.
Дело в том, что FoxPro сохраняет в заголовке файла ID кодовой страницы (байт со смещением 0x1D), которая использовалась при создании DBF-ки.
При открытии таблицы драйвер использует значение из заголовка, а не параметр "CODEPAGEID" (параметр в этом случае используется только при создании новых таблиц).
Соответственно, чтобы всё работало нормально, DBF-файл должен быть создан с правильной кодировкой - иначе будут проблемы.
//Параметры соединения с базой
Properties connInfo = new Properties();
connInfo.put("user",user);
connInfo.put("password",pass);
connInfo.put("useUnicode","true");
connInfo.put("characterEncoding","KOI8_R");
Connection conn=
DriverManager.getConnection(dbURL, props);
//Параметры соединения с базой
Properties connInfo=new Properties();
connInfo.put("user", username);
connInfo.put("password", password);
connInfo.put("charSet", "Cp1251");
//Устанавливаем соединение
Connection db=
DriverManager.getConnection(dataurl,connInfo);
Однако не забудьте при создании БД и таблиц указать кодировку символов.
Для русского языка можно использовать значения "UNICODE_FSS" или "WIN1251".
Пример:
CREATE DATABASE
'E:\ProjectHolding\DataBase\HOLDING.GDB'
PAGE_SIZE 4096
DEFAULT CHARACTER SET UNICODE_FSS;
CREATE TABLE RUSSIAN_WORD(
"NAME1" VARCHAR(40) CHARACTER SET UNICODE_FSS NOT NULL,
"NAME2" VARCHAR(40) CHARACTER SET WIN1251 NOT NULL,
PRIMARY KEY ("NAME1")
);
В версии 2.01 InterClient присутствует ошибка - классы ресурсов с сообщениями для русского языка там неправильно скомпилированы.
Скорей всего разработчики просто забыли указать кодировку исходников при компиляции.
Есть два пути исправления этой ошибки:
//Параметры соединения с базой
Properties connInfo=new Properties();
connInfo.put("user",username);
connInfo.put("password",password);
connInfo.put("lc_ctype","WIN1251");
//Устанавливаем соединение
Connection db=
DriverManager.getConnection(dataurl,connInfo);
interbase.interclient.DataSource dataSource=
new interbase.interclient.DataSource();
dataSource.setServerName("pongo");
dataSource.setDatabaseName("/databases/employee.gdb");
dataSource.setCharSet("Cp1251");
javax.naming.Context context=new javax.naming.InitialContext();
context.bind("jdbc/EmployeeDB",dataSource);
Другой пример - реализация от DBF-драйвера (com.hxtt.sql.HxttDataSource):
Properties prop=new Properties();
prop.setProperty("urlPrefix","jdbc:DBF:");
prop.setProperty("user","aaaaa");
prop.setProperty("password","vvvvccc");
prop.setProperty("database","dbffiles");
//Change it to yourdbfdir
prop.setProperty("charSet","Cp866");
DataSource dataSource=new com.hxtt.sql.HxttDataSource(prop);
context.bind(name, dataSource);
Но даже настроив JDBC-драйвер на нужную кодировку в некоторых случаях можно нарваться на неприятности.
Например, при попытке использования новых замечательных скролируемых курсоров стандарта JDBC 2 в мосте JDBC-ODBC из JDK 1.3.x довольно быстро можно обнаружить, что русские буквы там просто не работают (метод updateString()).