powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблемы с кирилицей в JTable
25 сообщений из 39, страница 1 из 2
Проблемы с кирилицей в JTable
    #38619402
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет, прошарил форум, не могу подходящий топик найти, решил написать:
Есть JTable, JTableModel.
Задача:
1.Внести через форму JFrame русские буквы в БД MS Access.
2.Сделать запрос в БД и вытащить эти данные в JTable.

Вот что я пробовал:
1. Добавляю запись в БД:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
                                 JTextField _rusTitle = new JTextField();
                                 ....
                                 _rusTitle.setText("Проверка");
				 byte ptext[] = _rusTitle.getText().getBytes();
                                 String strTitleRus;
				 try {
					 if (!_rusTitle.getText().equals("")) {
						 strTitleRus = new String(ptext, "windows-1251");
					 }
				 } catch (UnsupportedEncodingException e1) {
					e1.printStackTrace();
				 }
...
дальше strTitleRus уходит в executeUpdate


2. Принимаю данные из БД в JTableModel
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
	public Object getValueAt(int rowIndex, int columnIndex)
	{
...
		if (columnIndex == TITLE_RUS_COLUMN)
		{
			String strTitleRus;
			byte ptext[] = _data.get(rowIndex).TitleRus.getBytes();
			try {
				return strTitleRus = new String(ptext, "windows-1251");
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			};
		}
        }
....


Результат: ????????
Вопрос, в чем моя ошибка?
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38619415
korshun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне помог этот способ
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38619466
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо ссылка помогла, теперь вроде все ок.
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38619508
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поспешил, когда я добавляю запись через JFrame русский текст то отображается нормально, но этот же клиент запустить у дрогого чела то там опять вопросительные знаки.
В чем причина?
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38619723
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как я понял проблема так и осталась.
Настройку в Connection.getConnection(); сделал как вы подсказали, установил cp1251.
На клиенте:
JTableModel extends AbstractTableModel - тут при примеме текста тоже указал:

Код: java
1.
2.
3.
4.
5.
6.
7.
try {
				String cp1251text = new String(_data.get(rowIndex).TitleRus.getBytes("cp1251"));
				return cp1251text;
			} catch (UnsupportedEncodingException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}


Но зарисовке JTable-а опять вопросительные знаки.
Получается я вставляю данные в неизвестном мне формате т.к у Java своя кодировка по умолчанию, русский текст проходит через JDBC-ODBC connection в кодировке ср1251 и записывается в MS Access.
Потом я делаю выборку из таблицы и говорю JTableModel-у что кодировка будет cp1251 но все тщетно. :(
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38619724
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообщем прикол в том что пользователь добавляет запись и считывает нормально и русские буквы отображаются отлично, беру ту же программу и делаю выборку той же записи на другом компе а там уже вопросительные знаки.
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38620079
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рецепты очень простые. Уберите кириллицу из кода, если не можете всё правильно настроить на UTF.
Никогда не используйте String.getBytes() и new String() для исправление кодировки. Это костыль. Нужно исправить кодировку, там где она сломана, а не пытаться сломать её ещё раз вернув в изначальное состояние.
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38620266
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiQuidа там уже вопросительные знакиМожет дело в региональных настройках системы?
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38620632
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как мне быть без кирилицы? по ТЗ там поиск идет по русским буквам и словам... Вместо того чтобы читать натацию про getbytes, new string лекарство предложили бы как выйти из такой ситуации если есть примерчик.
LiQuid,
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38620646
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiQuidА как мне быть без кирилицы?
? Я говорил о кириллице в коде. Если вы не можете настроить IDE и компилятор на UTF, то используйте native2ascii.

LiQuidпо ТЗ там поиск идет по русским буквам и словам...

А ТЗ ничего не говорит о том что русские буквы и слова должны быть в .java файлах?

LiQuidВместо того чтобы читать натацию про getbytes, new string лекарство предложили бы как выйти из такой ситуации если есть примерчик.

Чего примерчик? Приложите код минимального примера на котором воспроизводится проблема и я покажу как эту проблему решить.
А то сразу примерчик подавай. Код за вас напиши.
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38620668
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiQuid,

Так же стоит проверить MS Access и настроить работу с ним так, чтобы перекодировки не требовались. Вы бы хоть определились для начала проблема у вас в JTable или в MS Access. А то в теме написано одно, в сообщении другое.
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38621029
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я же привел пример, те части кода где происходит преобразование:

В данный момент так:
Код: java
1.
2.
3.
4.
5.
6.
7.
			Properties connInfo = new Properties();
			connInfo.put("rrtech", "");
			connInfo.put("rrtech","");
			connInfo.put("charSet", "cp1251");
			
			_connection = DriverManager.getConnection(_settingsManager.getDccDatabaseName(), connInfo);
			_statement = _connection.createStatement();


В других местах я убрал преоразование.
1. Пользователь добавляет запись.
2. Делает выборку по той же добавленной записи и видит русские буквы нормально.
3. Я со своего компа запускаю программу и вижу вопросительные знаки по той же добавленной записи.
4. Открываю MS Access БД там тоже иероглифы в ячейке где русский текст.

Добавление записи происходит так (Буду просто писать компоненты):
JTextField.getText() передает текст на русском в Statement.executeUpdate (instert into...)

Делаю выборку той же записи:
ResultSet rs = _statement.executeQuery (Select * from...)
String TitleRus = rs.getString("RusTitle");
Создаю класс:
Код: java
1.
2.
public class DccTableModel extends AbstractTableModel //и т.д
public static final int TITLE_RUS_COLUMN = 0;


там в методе указываю:
Код: java
1.
2.
3.
4.
5.
6.
7.
	public Object getValueAt(int rowIndex, int columnIndex)
	{
              		if (columnIndex == TITLE_RUS_COLUMN)
		{			
			return _data.get(rowIndex).TitleRus; // Тут _data типа ArrayList который был уже объявлен в классе где вытащил rs.getString("RusTitle");
		}
        }


В главном классе указываю:
Код: java
1.
2.
3.
4.
JTable _dccTable = new JTable();
DccTableModel _dccModel = new DccTableModel();

_dccTable.setModel(_dccModel);



и т.д..
Где мне сделать преобразование в UTF-8?
Я уже пробовал в JTextField-е пробовал при принятии через return переменную TitleRus, не помогает.
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38621095
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiQuid,

Вы снова намешали всё в кашу. Не должно быть никаких "преобразований". Текст из MS Access должен читаться нормально. Этого у вас и не происходит. Соответсвенно нужно ковырянть настройки доступа к Access. Или попробовать jackcess, например, вместо ODBC-JDBC моста. А Swing к проблеме отношения не имеет. Разберитесь сначала с вашей проблемой доступа к данным.
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38621243
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что вы подразумеваете под "Соответсвенно нужно ковырянть настройки доступа к Access"?
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38621260
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiQuidЧто вы подразумеваете под "Соответсвенно нужно ковырянть настройки доступа к Access"?
Давайте с начала.
Вы вот это зачем делаете?
Код: java
1.
2.
new String(ptext, "windows-1251");
byte ptext[] = _rusTitle.getText().getBytes();


Уберите. И после этого опишите свою проблему. Что именно не работает?
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38621361
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я все убрал, сейчас в коде нет преобразования. Просто приложение, JDBC-ODBC подключение.
Проблема:
Есть
Компьютер 1
Компьютер 2

Добавляем запись с кирилицей из Компьютер 1 используя написанное мною приложение в БД Аксес.
Делаем выборку из БД Аксес используя мое приложение и в JTable кирилица отобразилась нормально.

Делаем выборку той же записи используя мое приложение из Компьютер 2.
Кирилица показывает ?????

т.е каждый комп видит нормально только ту кирилицу которая была добавлена через этот комп.
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38621370
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А при просмотре в MS Access обе базы нормальные?
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38621456
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Открыл Базу с двух компов, в обоих компах в самой базе русский текст отобразился нормально.
Только что добавил со своего компа текст, через свое приложение вытащил, кирилица отобразила нормально.
Пошел к другому компу, вытащил эту же запись а там уже ?????

Вот так...
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38621472
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Повторите эксперимент с
connInfo.put("charSet", "UTF-8");
или
connInfo.put("charSet", "UTF8");
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38621501
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поставил:
connInfo.put("charSet", "UTF-8");
и
connInfo.put("charSet", "UTF8");

Добавил со своего компа запись через приложение и открыл запись через свое приложение, текст кирилица отобразилась корректно.
Открыл ту же запись с другого компа, вместо кирилицы вопросительные знаки.

Теперь в самой БД на обоих компах вместо кирилицы иероглифы (НЕ вопросительные знаки)
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38621502
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е connInfo.put("charSet", "UTF-8"); - одну запись
connInfo.put("charSet", "UTF8"); - тоже одну запись добавлял для проверки.
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38621515
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiQuidТеперь в самой БД на обоих компах вместо кирилицы иероглифы (НЕ вопросительные знаки)
Так это уже достижение. Значит мы на верному пути. "Вопросительные знаки" это полная потеря данных. А вот "иероглифы" это конкретно результат использования, обычно, 2х разных кодировок при записи и чтении.
1) Опубликуйте оригинальный текст и полученые "иероглифы" сюда. А так же уточните как конкретно они получены. Например "ввели текст в Swing и записали через JDBC в Access".
2) Поэксперементируйте ещё с параметром charSet:
windows-1251
cp866
IBM866
ISO-8859-1
ISO8859_1
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38621541
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот иероглифы (Из самой таблицы в MS Access т.е не через моек приложение):
Оригинал:
Тест русский 1
в БД:
Тест русский 1

Текст добавлял через текст в Swing (JTextField) и записал через JDBC в Access
А по второму пункту щяс буду эксперементировать
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38621565
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiQuidОригинал:
Тест русский 1
в БД:
Тест русский 1

Это UTF-8 прочитаный как cp1251. Я бы поэксперементировал со свойством charSet и вариантами написания CP1251. Потому что драйвер отправил данные в UTF, а база прочитала как 1251. Значит нужно драйвер попросить отправить в 1251.

LiQuidТекст добавлял через текст в Swing (JTextField)

Сколько нужно повторить что Swing к проблеме отношения не имеет, чтобы вы в это поверили?

LiQuidи записал через JDBC в Access

Через JDBC-ODBC мост. И ODBC здесь дополнительный слой как возможный источник ошибок. Надо учитывать.
...
Рейтинг: 0 / 0
Проблемы с кирилицей в JTable
    #38621574
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кирилица в БД на обоих компах отображается так:

windows-1251 Тест 1
cp866 - ’Ґбв 2
IBM866 - ’Ґбв 3
ISO-8859-1 - ???? 4
ISO8859_1 - ???? 5

На клиентской программе все кодировки показали вопросительные знаки
Создавал *.jar файл для каждой кодировки отдельно и делал запрос в БД и смотрел как на JTable-е нарисуется кирилица.
...
Рейтинг: 0 / 0
25 сообщений из 39, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблемы с кирилицей в JTable
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]