powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Смена кодировки файла из-под java
25 сообщений из 52, страница 2 из 3
Смена кодировки файла из-под java
    #33166410
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уже нашел, разобрался=). Они у меня на диске(документация)
Блин, записал 5 xml в clob, сделал поиск по контексту и выборку. А надо, оказывается, не в clob, а в xmltype, без использования pl/sql и уже там с XPATH находить нужный узел, но если записывать через переменную и встречается "я" маленькая, то invalid character 0xFF, с остальными русскими буквами нормально, как например:
num=stmt.executeUpdate("insert into worker(id,xdoc) values(10,sys.XMLType.CreateXML('"+cmd+"'))");
Где cmd-строка. Если не очень маленькая-скажет, что строковый литерал слишком большой. Как быть(?)
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33166478
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sober
Код: plaintext
num=stmt.executeUpdate("insert into worker(id,xdoc) values(10,sys.XMLType.CreateXML('"+cmd+"'))");
Где cmd-строка. Если не очень маленькая-скажет, что строковый литерал слишком большой. Как быть(?)
Иди через CLOB. Сперва создай его (через CLOB.createTemporary(), к примеру), наполни его данными, после чего вызови PreparedStatement:
Код: plaintext
1.
2.
3.
PreparedStatement pst = con.prepareStatement("insert into worker(id, xdoc) values(10, XMLType(?)";);
pst.setClob( 1 , clob);
pst.executeUpdate();
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33172011
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошая идея, пожалуй, не догадался бы до этого.
Только, наверное, не XMLType(?), а sys.XMLType.CreateXML(?) иначе, пожалуй, ругнется. Там, правда, может быть LPX--00007(unexpected end-of-file), если использовать симв. поток i.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33173392
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Те же прежние грабли: даже после выборки из clob и вставки его в xmltype так же ругается на "я"(странное, но ведь xmltype-тот же clob по идее, только что oracle сообщается, что там хранится xml-документ). По сути это почти единственная проблема, которая еще не до конца решена.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33173472
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая версия базы, в какой она создана кодировке? Приведи пример XML (можно приложить файл к сообщению) и укажи его кодировку.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33174239
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
9i Release1. Кодировка там вроде по-умолчанию стоит(...кириллица windows) у xml-документов:windows-1251(стандартное). А один из файлов уже приводил.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33174309
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этот XML? Вроде как там шла речь про "И". но у себя я ошибку повторить не могу, поскольку, создав файл "C:/Tmp/test.xml" с содержимым:

Код: plaintext
<я>яяя</я>

и кодировкой Cp1251, уже приведенный код с небольшим изменением:

Код: plaintext
1.
2.
3.
4.
5.
6.
 try  {
  st.execute("drop table test_xml");
}  catch  (SQLException e) {}
st.execute("create table test_xml (test_xml_id number(9), xml XMLType)");
CLOB clob = file2clob(con, "C:/Tmp/test.xml", "Cp1251");
cst = con.prepareCall("insert into test_xml (test_xml_id, xml) values (1, XMLType(?))"); 

отработал нормально. Но у меня база в кодировке UTF8.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33175768
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, он. Насчет того, что вместо И->? было дело, при использовании временного lob и clob таблицы. Ладно, пока ее оставлю. Если повторится- сообщу. В xmltype все же ругается на "я" вполне возмножно из-за win1251(можно,конечно, "я"-> "Я",=), но при выгрузке сделать обратное). А у тебя какая версия?
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33175826
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oracle9i Enterprise Edition Release 9.2.0.6.0
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0

Кодировка везде UTF8.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33176497
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, тут еще одна неясность:
если во временый clob записать док-т, а потом вытащить, то он выдаст не все,а длину lob(clob.length) покажет как размер док-та(что верно), и этот остаток (до конца) он заполняет нулями. В результате после "execute" (XMLType(?) и setClob(1,clob)) он и выдает этот error ввиде "unexpected end-of-file". Сегодня еще попробую обойти, а потом приведу код.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33176815
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странные у тебя ошибки какие-то, я все не могу из воспроизвести:) Что понимается под "остаток (до конца)"?
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33178589
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот, например(фрагмент):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CLOB clob;
Writer writer= null ;
Reader oreader;
InputStreamReader reader= new  InputStreamReader( new  FileInputStream("d:/oa_goms_planeta.xml"));
            clob=CLOB.createTemporary(con,true,CLOB.DURATION_SESSION);
             char [] cbuf= new   char [( int )clob.getChunkSize()];
            writer=clob.getCharacterOutputStream();
             while  ((len=reader.read(cbuf))!=- 1 )
            writer.write(cbuf, 0 ,len);
             if  (reader!= null ) reader.close(); if  (writer!= null ) writer.close();
            System.out.println("The CLOB is:"+clob.length());
            len= 0 ;cbuf= null ;
            cbuf= new   char [clob.getChunkSize()];
            reader= null ;
            oreader=clob.getCharacterStream();
             while  ((len=oreader.read(cbuf))!=- 1 )
            {System.out.println(cbuf);}
         if  (oreader!= null ) oreader.close();
На консоль выводит примерно следующее:
The CLOB is:3216
<?xml version="1.0" encoding="windows-1251"?>
<metaData xmlns="http://www.wmo.ch/www/metadata"><metadataFileIdentifier>http://cliware.meteo.ru/egfd_catalog/metadata/oa_goms_Planeta.xml</metadataFileIdentifier><metadataLanguage>ru</metadataLanguage><metadataContact><organisationName>ГУ Всероссийский НИИ гидрометеорологической информации - МЦД</organisationName><role>user</role><individualName>Хохлова Анна Владимировна</individualName><positionName>Зав. Отделом аэрологии</positionName><contactInfo><phone><voice>+7(08439)74-680</voice></phone><address><city>Королева,6 г.Обнинск</city><administrativeArea>Калужская</administrativeArea><postalCode>249035</postalCode><country>РОССИЯ</country><electronicMailAddress>anna@meteo.ru<;/electronicMailAddress></address></contactInfo></metadataContact><metadataDateStamp>2005-06-07</metadataDateStamp><metadataStandardName>WMO19115</metadataStandardName><metadataStandardVersion>0.2</metadataStandardVersion><identificationInfo><citation><resourceTitle>Государственный фонд Росгидромета. Спутниковые данные.</resourceTitle><resourceIdentifier>Монтажи спутниковых изображений (GOMS)</resourceIdentifier></citation><abstract>До 1998г. фотомонтажи спутниковых изображений из НИЦ "Планета" поступали на фотопленках. Начиная с 1998г. монтажи поступают на новых технических носителях (CD ROM). На них представлены монтажи спутниковых изображений, полученных с полярно-орбитальных или геостационарных спутников. Монтажи сопровождаются отдельными файлами, содержащими информацию о времени наблюдений.</abstract><pointOfContact><organisationName>ГУ Всероссийский НИИ гидрометеорологической информации - МЦД</organisationName><role>custodian</role><individualName>Шакирзянов Идрис Закирзянович</individualName><positionName>Начальник центра метаданных</positionName><contactInfo><phone><voice>+7(08439)74-158</voice><facsimile>+7(095)255-22-25</facsimile></phone><address><city>Королева, 6 г.Обнинск</city><administrativeArea>Калужская</administrativeArea><postalCode>249035</postalCode><country>РОССИЯ</country><electronicMailAddress>idr@meteo.ru<;/electronicMailAddress></address><onlineAddress>www.meteo.ru</onlineAddress></contactInfo></pointOfContact><resourceMaintenance><maintenanceAndUpdateFrequency>annually</maintenanceAndUpdateFrequency></resourceMaintenance><spatialRepresentationType>bitmap</spatialRepresentationType><dataCharacterSet>8859part5</dataCharacterSet><topicCategory>satelliteObservation</topicCategory><topicCategory>imageryBaseMapsEarthCover</topicCategory><descriptiveKeywords>Наблюдение</descriptiveK
А дальше некоторое кол-во нулей ввиде квадратов(здесь они не отображаются)
В общем так.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33178677
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SoberВот, например(фрагмент):
Код: plaintext
1.
2.
3.
 while  ((len=oreader.read(cbuf))!=- 1 ) {
  System.out.println(cbuf);
}


Конечно, он тебе будет выводить в консоль весь cbuf, хотя в него прочиталось len символов.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33178739
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно, допустим так. Можно, конечно, и не выводить. Но, если его длина такая же, как и размер файла, то в нем весь xml(или не обязательно?). Во всяком случае, при подстановке clob-файл оказывается не до конца записан. Можно, конечно, уже готовый clob таблицы, где у меня эти док-ты уже есть и вытаскиваются без проблем, подставить в xmltype, но хотелось бы с этим разобраться.=)
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33178775
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про то, как выводить, уже говорили . Насчет "не до конца записан" - покажи код. Может ты поток не закрываешь или хотя-бы не сбрасываешь перед вызовом записи CLOB'а в базу?
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33180464
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код приведу.
Поток закрываю иначе не запишется. А что ты подразумеваешь под сбросом?
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33180469
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
flush()
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33182385
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Примерно так:

CLOB clob=null;
Writer writer=null;
InputStreamReader reader=new InputStreamReader(new BufferedInputStream(new FileInputStream("e:/xml/oa_goms_planeta.xml")),charset);
Reader oreader=null;
try
{clob=CLOB.createTemporary(con,true,CLOB.DURATION_SESSION);
char[] cbuf=new char[(int)clob.getChunkSize()];
writer=clob.getCharacterOutputStream();

while ((i=reader.read(cbuf,0,(int)clob.getChunkSize()))!=-1)
{
writer.write(cbuf,0,i);
}
}
finally
{
if (writer!=null) writer.close();
if (reader!=null) reader.close();
}
oreader=clob.getCharacterStream();i=0;
char[] cbuf=new char[(int)clob.getChunkSize()];
cbuf=null;cbuf=new char[(int)clob.length()];
System.out.println("Hey! cbuf from clob is:"+clob.length()+" "+clob.getChunkSize()+" "+clob.getLength());
while ((i=oreader.read(cbuf,0,(int)clob.length()))!=-1)
{

System.out.println("Number of read symbols is:"+i);
System.out.println(cbuf);
}
К примеру, из 3 м.длины выдает только 2.7м.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33182696
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня вышеприведенный код выдал ровно столько символов, сколько и было в файле.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33182948
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть некоторые догадки:
У файла есть метод flush()?
И как указать размер файла при инициализации?
А если консоль, то можно ли изменить его размер? Но с другой стороны, для любого файла(3-7 Kb) он выдает тоже(т.е.,пропорционально).
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33182972
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
flush() - это у потоков. Размер файла - length().
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33189777
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ты ее в какой среде разработки прогонял и версии б.д.?
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33199379
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какие еще есть варианты создания CLOB не через createTemporary()? Да и сильно ли отличается работа с LOBми в 9i(R1,R2) и 10g?
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33199452
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SoberКакие еще есть варианты создания CLOB не через createTemporary()?
/topic/195669&pg=1#1667972 Второй способ
SoberДа и сильно ли отличается работа с LOBми в 9i(R1,R2) и 10g?
С точки зрения базы ИМХО мало, а вот в JDBC от Oracle10 в CLOB\'e, например, реализовали наконец метод setCharacterStream(). В драйверах от 9i ее вызов приводил к исключению, мол, не поддерживается. В JDBC от 10-ки работает, но это от базы не зависит. Может еще чего есть.
...
Рейтинг: 0 / 0
Смена кодировки файла из-под java
    #33199645
Sober
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятно.
Кстати, на oracle.com: нашел свой же error(когда после вставки пустого lob делал выборку для записи данных):
Error Message: "ORA-01002: fetch out of sequence"

A JDBC Connection by default has the AutoCommit turned ON. However, to use a SQL that has 'for update' you need to have autoCommit to be turned OFF.

Hence, the solution is to set autocommit to false.
Ее уже ранее описывал.
...
Рейтинг: 0 / 0
25 сообщений из 52, страница 2 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Смена кодировки файла из-под java
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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