Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблемы с кирилицей в JTable / 25 сообщений из 39, страница 1 из 2
19.04.2014, 10:03
    #38619402
LiQuid
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с кирилицей в JTable
Всем привет, прошарил форум, не могу подходящий топик найти, решил написать:
Есть 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
19.04.2014, 10:58
    #38619415
korshun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с кирилицей в JTable
Мне помог этот способ
...
Рейтинг: 0 / 0
19.04.2014, 13:13
    #38619466
LiQuid
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с кирилицей в JTable
Спасибо ссылка помогла, теперь вроде все ок.
...
Рейтинг: 0 / 0
19.04.2014, 15:17
    #38619508
LiQuid
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с кирилицей в JTable
Поспешил, когда я добавляю запись через JFrame русский текст то отображается нормально, но этот же клиент запустить у дрогого чела то там опять вопросительные знаки.
В чем причина?
...
Рейтинг: 0 / 0
20.04.2014, 08:10
    #38619723
LiQuid
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с кирилицей в JTable
Как я понял проблема так и осталась.
Настройку в 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
20.04.2014, 08:11
    #38619724
LiQuid
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с кирилицей в JTable
Вообщем прикол в том что пользователь добавляет запись и считывает нормально и русские буквы отображаются отлично, беру ту же программу и делаю выборку той же записи на другом компе а там уже вопросительные знаки.
...
Рейтинг: 0 / 0
21.04.2014, 09:48
    #38620079
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с кирилицей в JTable
Рецепты очень простые. Уберите кириллицу из кода, если не можете всё правильно настроить на UTF.
Никогда не используйте String.getBytes() и new String() для исправление кодировки. Это костыль. Нужно исправить кодировку, там где она сломана, а не пытаться сломать её ещё раз вернув в изначальное состояние.
...
Рейтинг: 0 / 0
21.04.2014, 12:19
    #38620266
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с кирилицей в JTable
LiQuidа там уже вопросительные знакиМожет дело в региональных настройках системы?
...
Рейтинг: 0 / 0
21.04.2014, 16:15
    #38620632
LiQuid
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с кирилицей в JTable
А как мне быть без кирилицы? по ТЗ там поиск идет по русским буквам и словам... Вместо того чтобы читать натацию про getbytes, new string лекарство предложили бы как выйти из такой ситуации если есть примерчик.
LiQuid,
...
Рейтинг: 0 / 0
21.04.2014, 16:28
    #38620646
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с кирилицей в JTable
LiQuidА как мне быть без кирилицы?
? Я говорил о кириллице в коде. Если вы не можете настроить IDE и компилятор на UTF, то используйте native2ascii.

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

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

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

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

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

В данный момент так:
Код: 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
22.04.2014, 09:34
    #38621095
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с кирилицей в JTable
LiQuid,

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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