Я пытаюсь создать приложение, которое подключается к базе данных Access. Я сделал это через соединение ODBC моей программы Java с файлом .mdb, но у меня есть эта проблема с символами Unicode. Если запись написана на английских (латинских) символах, тогда файл .mdb распознает символы, но если запись записана на греческом языке, появляются некоторые странные символы, и я не могу получить запись с объектом ResultSet. Может кто-нибудь помочь?Проблемы с символами Unicode Java ODBC MS-Access
ответ
Мост JDBC-ODBC не работает корректно с драйвером Access ODBC, когда строки содержат символы Unicode, чья кодовая точка выше U + 007F. Греческие символы попадают в эту категорию, поэтому подход JDBC-ODBC Bridge не будет работать для вас. (Подробнее here.) Кроме того, мост JDBC-ODBC был удален с Java (начиная с Java 8).
Для правильной поддержки греческих символов я бы рекомендовал использовать UCanAccess. Обзор того, как это установить, см. В другом из моих ответов here.
После того, как ваш проект был настроен на использование UCanAccess вы можете работать с базой данных Access, используя такой код:
Connection conn=DriverManager.getConnection(
"jdbc:ucanaccess://C:/__tmp/unicode.accdb");
String language = "Greek";
PreparedStatement ps = conn.prepareStatement(
"SELECT [word], [english_equiv] " +
"FROM [vocabulary] " +
"WHERE language=?");
ps.setString(1, language);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
System.out.println(String.format(
"\"%s\" is %s for \"%s\".",
rs.getString("word"),
language,
rs.getString("english_equiv")));
}
rs.close();
ps.close();
String newWord = "ηλεκτρονικός υπολογιστής";
String newEnglishEquiv = "computer";
ps = conn.prepareStatement(
"INSERT INTO [vocabulary] ([word], [language], [english_equiv]) " +
"VALUES (?,?,?)");
ps.setString(1, newWord);
ps.setString(2, language);
ps.setString(3, newEnglishEquiv);
ps.executeUpdate();
System.out.println(String.format(
"\"%s\" has been added to the table.",
newWord));
Этот код производит следующий вывод на консоль:
"γιορτή" is Greek for "feast"
"ηλεκτρονικός υπολογιστής" has been added to the table.
(Перевод любезно Google Translate.)
большое спасибо, сэр !! я действительно ценю ваше время! Я думаю, что решить мою проблему: D !! – Nomik
Могу я задать другой вопрос. Когда я пытаюсь выполнить rs.last(); команда, она дает мне эту ошибку: net.ucanaccess.jdbc.UcanaccessSQLException: функция не поддерживается. Почему это происходит? – Nomik
Если вы вызываете ResultSet.first() или ResultSet.last(), вы должны правильно инициализировать Statement или PreparedStatement :
PreparedStatement ps =conn.prepareStatement("SELECT * FROM T1",ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
@Gord, спасибо за все, что вы делаете о UCanAccess.
- 1. Облицовочные проблемы с символами Unicode
- 2. Проблемы с сохранением файла с символами Unicode
- 3. Создать pdf с символами unicode
- 4. Unicode через ODBC
- 5. Проблемы с греческими символами с помощью Java
- 6. MSAccess через ODBC - безводное поведение - настройки DSN
- 7. Создание проблемы с драйверами ODBC
- 8. wprintf с символами UNICODE (иврит)
- 9. imagejpeg() Проблема с символами Unicode
- 10. Поиск Lucene с символами Unicode
- 11. Использование sprintf с символами Unicode
- 12. Java 8 дженериков проблемы с групповыми символами
- 13. Ошибка Unicode ODBC SQL Server?
- 14. Безопасно использовать password_hash с символами Unicode?
- 15. Проблемы с Java Unicode (я думаю)
- 16. с использованием DocumentFilter.replace с символами Unicode
- 17. Почему Unicode хранится с периодами между символами?
- 18. Как работать с символами Unicode в C++
- 19. Ошибка кодирования Python с некоторыми символами unicode
- 20. Подключение к MSAccess с Java
- 21. Проблемы с китайскими символами
- 22. Два INNER JOIN ODBC MSAccess исключение с запросом
- 23. Экспорт DynamicReports в PDF с символами Unicode Java
- 24. Плагин сборки Maven с символами Unicode
- 25. Проблемы с Batch Taskkill ВЫШЕСТОЯЩИХ MSAccess процесса
- 26. Проблемы с символами EDI Hex
- 27. ODBC C++ Проблемы с sqlucode.h заголовком
- 28. Проблемы с Unicode/Non-Unicode/UTF-8
- 29. Как определить строки unicode с непечатаемыми символами?
- 30. PHP-GD: Работа с символами Unicode
Некоторые dbs имеют другой тип данных для данных, отличных от ascii. Строки Java - это Unicode по дизайну – Leo
проблема заключается в том, что я получаю запись из своего db java, понимая буквы не-ascii и конвертируя их в греческий, но это происходит, когда я получаю все записи. Это означает, что я не могу найти конкретный имя, например, не может быть признано – Nomik
нормально, но как я могу использовать UCanAccess? – Nomik