powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Знаки вопроса в тексте Exception при работе с Oracle
27 сообщений из 27, показаны все 2 страниц
Знаки вопроса в тексте Exception при работе с Oracle
    #32752571
spainard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СУБД Oracle 8.17 стоит на WinXP
Клиент на WinXP, Java 1.4
Использую OCI соедиение:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
try {
     DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
     con = DriverManager.getConnection("jdbc:oracle:oci8:@"+sheme, user, pass);
            Statement sm = con.createStatement();
            sm.execute("alter session set nls_numeric_characters = '. '");
            sm.execute("alter session set nls_date_format = 'dd-mm-yyyy hh24:mi:ss'");
         }
     catch(Exception ex)
        {
        ex.printStackTrace();
        }
 //определяем дескриптор 
    try {
         oracle.sql.StructDescriptor structDesc;
        structDesc = oracle.sql.StructDescriptor.createDescriptor("firm.BankObj", con);
    }
   catch(Exception exx)
       {
       exx.printStackTrace();
       }
на строке structDesc = oracle.sql.StructDescriptor.createDescriptor("firm.BankObj", con); возникает Exception:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
java.sql.SQLException: ???????????????? ?????? ?????: firm.BankObj
	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:168)
	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:210)
	at oracle.jdbc.oracore.OracleTypeADT.initMetadata(OracleTypeADT.java:424)
	at oracle.jdbc.oracore.OracleTypeADT.init(OracleTypeADT.java:343)
	at oracle.sql.StructDescriptor.initPickler(StructDescriptor.java:151)
	at oracle.sql.StructDescriptor.<init>(StructDescriptor.java:129)
	at oracle.sql.StructDescriptor.createDescriptor(StructDescriptor.java:97)
	at ru.dohod.uk.server.behavior.ora_test.<init>(ora_test.java:78)
	at ru.dohod.uk.server.AgentServer4.main(AgentServer4.java:36)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:324)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:78)

Не могу понять чем ошибка, в Oracle создается тип:
Код: plaintext
1.
CREATE OR REPLACE TYPE firm.bankobj is object   (ba_id number, ba_name varchar2( 255 ))
/
Как заменить знаки вопроса в исключении на нормальное сообщение?
Хелп, плиз..
...
Рейтинг: 0 / 0
Знаки вопроса в тексте Exception при работе с Oracle
    #32752591
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NLS_LANG какой на клиенте? Если критична читабельность попробуйте AMERICAN_AMERICA.CL8MSWIN1251
...
Рейтинг: 0 / 0
Знаки вопроса в тексте Exception при работе с Oracle
    #32752672
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) используй лучше jdbc thin driver
2) текст ошибки (возможно) будет правильно отображаться если его писать в файл.
3) глянь еще сюда
...
Рейтинг: 0 / 0
Знаки вопроса в тексте Exception при работе с Oracle
    #32752922
spainard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кодировка именно это стоит:
AMERICAN_AMERICA.CL8MSWIN1251
(смотрел в реестре windows, Software->Oracle)
использовал thin драйвер, тоже самое... :(
И в файл пишет знаками вопрос..
...
Рейтинг: 0 / 0
Знаки вопроса в тексте Exception при работе с Oracle
    #32752931
spainard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Правильнее сказать не кодировка, а именно NLS_LANG,
в Software->Oracle
и в Software->Oracle->Home0
...
Рейтинг: 0 / 0
Знаки вопроса в тексте Exception при работе с Oracle
    #32752946
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть в classpath nls_charset12?
...
Рейтинг: 0 / 0
Знаки вопроса в тексте Exception при работе с Oracle
    #32752949
51-й тынц Консалтинг Груп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда создается соединение (на примере с MS SQL Server), я использую для его настройки не

Код: plaintext
1.
con = DriverManager.getConnection("jdbc:oracle:oci8:@"+sheme, user, pass);

а

Код: plaintext
1.
con = DriverManager.getConnection(url, p);

где p instanceof java.util.Properties. В нем и указывается кодировка -

Код: plaintext
1.
p.setProperty("characterEncoding", "Cp1251");

PS Хотя я могу быть не прав в данном случае.

Код: plaintext
1.
------------------------------------------- 
фсиво наилутшева, 51-й тынц Консалтинг Груп
...
Рейтинг: 0 / 0
Знаки вопроса в тексте Exception при работе с Oracle
    #32752978
spainard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nls_charset12 в classpath есть
Вся строка запуска:
C:\JBuilder9\jdk1.4\bin\java -Didea.launcher.port=7533 -Didea.launcher.library=C:\IntelliJ-IDEA-4.5\bin\breakgen.dll -classpath C:\JBuilder9\jdk1.4\jre\lib\charsets.jar;C:\JBuilder9\jdk1.4\jre\lib\jaws.jar;C:\JBuilder9\jdk1.4\jre\lib\jce.jar;C:\JBuilder9\jdk1.4\jre\lib\jsse.jar;C:\JBuilder9\jdk1.4\jre\lib\rt.jar;C:\JBuilder9\jdk1.4\jre\lib\sunrsasign.jar;C:\JBuilder9\jdk1.4\jre\lib\ext\dnsns.jar;C:\JBuilder9\jdk1.4\jre\lib\ext\ldapsec.jar;C:\JBuilder9\jdk1.4\jre\lib\ext\localedata.jar;C:\JBuilder9\jdk1.4\jre\lib\ext\sunjce_provider.jar;D:\RemoteAgent\work\classes;D:\RemoteAgent\work\lib\log4j-1.2.8.jar;D:\RemoteAgent\work\lib\xmlparserv2.jar;D:\RemoteAgent\work\lib\jbcl.jar;D:\RemoteAgent\work\lib\classes12.zip;D:\RemoteAgent\work\lib\nls_charset12.zip;D:\RemoteAgent\work\lib\jacob.jar;C:\IntelliJ-IDEA-4.5\lib\idea_rt.jar com.intellij.rt.execution.application.AppMain ru.server.AgentServer4

Properties счас попробую..
...
Рейтинг: 0 / 0
Знаки вопроса в тексте Exception при работе с Oracle
    #32752997
spainard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Установка Property не помогла :(
Делаю вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
  try {
            DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
        Properties info = new Properties();
            info.setProperty("user", user);
            info.setProperty("password", pass);
            info.setProperty("characterEncoding", "Cp1251");
         con = DriverManager.getConnection("jdbc:oracle:oci8:@"+sheme, info);
            Statement sm = con.createStatement();
            sm.execute("alter session set nls_numeric_characters = '. '");
            sm.execute("alter session set nls_date_format = 'dd-mm-yyyy hh24:mi:ss'");
         }
     catch(Exception ex)
        {
        ex.printStackTrace();
        }
...
Рейтинг: 0 / 0
Знаки вопроса в тексте Exception при работе с Oracle
    #32753002
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если из под идеи отладка то можно настроить IDE Settings->General->Default encoding в windows-1251
...
Рейтинг: 0 / 0
Знаки вопроса в тексте Exception при работе с Oracle
    #32753019
spainard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Грхм, то же самое.. Вопросы
Но дело похоже именно в этом. Я попробовал поставить UTF-8 - вылезла какая-то лубуда вместо вопросов.. Так какая же тогда?
...
Рейтинг: 0 / 0
Знаки вопроса в тексте Exception при работе с Oracle
    #32753029
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а при создании базы какая кодировка была установлена?
...
Рейтинг: 0 / 0
Знаки вопроса в тексте Exception при работе с Oracle
    #32753053
spainard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Честно говоря не знаю какая при создании базы..
Она прописывается в реестре windows?
Если прописывается, то там тоже American_america..
СУБД стоит тоже на win (или xp или 2000)
Счас перепробовал все кодировки, доступные в настройках Идеи, или лубуда, или вопросы... м-да..
...
Рейтинг: 0 / 0
Знаки вопроса в тексте Exception при работе с Oracle
    #32753065
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
здесь спросите про кодировки
...
Рейтинг: 0 / 0
Знаки вопроса в тексте Exception при работе с Oracle
    #32753082
spainard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, попробую...
...
Рейтинг: 0 / 0
Знаки вопроса в тексте Exception при работе с Oracle
    #32753107
spainard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кодировка на сервере:
NLS_NCHAR_CHARACTERSET
CL8MSWIN1251
...
Рейтинг: 0 / 0
Знаки вопроса в тексте Exception при работе с Oracle
    #32753167
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CHARACTERSET CL8MSWIN1251
NLS_NCHAR_CHARACTERSET AL16UTF16и всё в порядке

вот сюда гляньте
...
Рейтинг: 0 / 0
Знаки вопроса в тексте Exception при работе с Oracle
    #32753277
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spainard
Как заменить знаки вопроса в исключении на нормальное сообщение?
Хелп, плиз..

Может попробовать поменять локаль на англоязычную, чтобы само сообщение прочитать, поскольку ИМХО это сообщение об ошибке от Java, а не от Oracle:

Код: plaintext
1.
Locale.setDefault(Locale.UK);
...
Рейтинг: 0 / 0
Знаки вопроса в тексте Exception при работе с Oracle
    #32753376
spainard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Йа-ба-да-баду!
Поставил: Locale.setDefault(Locale.UK); и усе заработало!
на англицком! но это замечательно!!!
Всем большое спасибо за участие.
Отдельное спасибо Денису Попову!
...
Рейтинг: 0 / 0
Знаки вопроса в тексте Exception при работе с Oracle
    #32753379
spainard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
zalexaka - также спасибо!
...
Рейтинг: 0 / 0
Знаки вопроса в тексте Exception при работе с Oracle
    #33285316
GlukOza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spainardУстановка Property не помогла :(
Делаю вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
   try  {
            DriverManager.registerDriver( new  oracle.jdbc.driver.OracleDriver());
        Properties info =  new  Properties();
            info.setProperty("user", user);
            info.setProperty("password", pass);
            info.setProperty("characterEncoding", "Cp1251");
         con = DriverManager.getConnection("jdbc:oracle:oci8:@"+sheme, info);
            Statement sm = con.createStatement();
            sm.execute("alter session set nls_numeric_characters = '. '");
            sm.execute("alter session set nls_date_format = 'dd.mm.yyyy hh24:mi:ss'");
         }
      catch (Exception ex)
        {
        ex.printStackTrace();
        }



После выполнения этих команд, я попробывала сделать запрос и на основе запроса - модель таблицы.
Запрос примерно такой: Select data from mytable.

Так вот, поле daта выводится выводится не в том формате, которы указан в команде alter session.

Может кто скажет, как не используя в запросе to_date или to_char добиться желаемого формата даты?
...
Рейтинг: 0 / 0
Знаки вопроса в тексте Exception при работе с Oracle
    #33285369
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
получаете дату через getDate?
RTFM
...
Рейтинг: 0 / 0
Знаки вопроса в тексте Exception при работе с Oracle
    #33285471
GlukOza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zalexakaполучаете дату через getDate?
RTFM

Может я вас не совсем поняла.

Я в запросе сейчас использую:

to_date(DATA,'dd.mm.yyyy','nls_date_language=UKRAINIAN') DATA

И только после этого в JTable выводится красиво дата.

А как без такого длинного выражения, используя alter session установить нужный мне формат даты.
...
Рейтинг: 0 / 0
Знаки вопроса в тексте Exception при работе с Oracle
    #33285575
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так вроде, сейчас к сож. проверить не могу
alter session set NLS_DATE_FORMAT='dd.mm.yyyy'
...
Рейтинг: 0 / 0
Знаки вопроса в тексте Exception при работе с Oracle
    #33285588
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поравочка Ж)
alter session set NLS_DATE_FORMAT="dd.mm.yyyy"
...
Рейтинг: 0 / 0
Знаки вопроса в тексте Exception при работе с Oracle
    #33285954
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GlukOza
Я в запросе сейчас использую:

to_date(DATA,'dd.mm.yyyy','nls_date_language=UKRAINIAN') DATA

И только после этого в JTable выводится красиво дата.

А как без такого длинного выражения, используя alter session установить нужный мне формат даты.
Ты имеешь в виду TO_CHAR, если поле DATA имеет тип DATE? Но если ты в Яве получаешь значение через getDate(), то далее она уже форматируется независимо от Oracle. Выбери, где ты хочешь формировать требуемый результат:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
con = DriverManager.getConnection(SERVER, USERNAME, PASSWORD);
st = con.createStatement();
// Формат в Java
rs = st.executeQuery("select sysdate from dual");
 if  (rs.next()) {
  Date date = rs.getDate("sysdate");
  SimpleDateFormat dateFormatter =  new  SimpleDateFormat("dd.MM.yyyy");
  String result = dateFormatter.format(date);
  System.out.println(result);
}
// Формат в Oracle
rs = st.executeQuery("select to_char(sysdate, 'dd.mm.yyyy') system_date from dual");
 if  (rs.next()) {
  String result = rs.getString("system_date");
  System.out.println(result);
}

Первое по-моему правильнее.
...
Рейтинг: 0 / 0
Знаки вопроса в тексте Exception при работе с Oracle
    #33286035
GlukOza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis Popov GlukOza
Я в запросе сейчас использую:

to_date(DATA,'dd.mm.yyyy','nls_date_language=UKRAINIAN') DATA

И только после этого в JTable выводится красиво дата.

А как без такого длинного выражения, используя alter session установить нужный мне формат даты.
Ты имеешь в виду TO_CHAR, если поле DATA имеет тип DATE? Но если ты в Яве получаешь значение через getDate(), то далее она уже форматируется независимо от Oracle. Выбери, где ты хочешь формировать требуемый результат:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
con = DriverManager.getConnection(SERVER, USERNAME, PASSWORD);
st = con.createStatement();
// Формат в Java
rs = st.executeQuery("select sysdate from dual");
 if  (rs.next()) {
  Date date = rs.getDate("sysdate");
  SimpleDateFormat dateFormatter =  new  SimpleDateFormat("dd.MM.yyyy");
  String result = dateFormatter.format(date);
  System.out.println(result);
}
// Формат в Oracle
rs = st.executeQuery("select to_char(sysdate, 'dd.mm.yyyy') system_date from dual");
 if  (rs.next()) {
  String result = rs.getString("system_date");
  System.out.println(result);
}

Первое по-моему правильнее.

Спасибо за совет.
...
Рейтинг: 0 / 0
27 сообщений из 27, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Знаки вопроса в тексте Exception при работе с Oracle
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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