Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Что не так??? / 7 сообщений из 7, страница 1 из 1
12.07.2006, 11:27
    #33847216
Yordan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что не так???
Добрый ден! Пытаюсь динамически создать excel-файл используя BLOB-поле в качестве OutputStream. Ошибок во время выполнения нет. Однако длина созданного BLOB-а всегда равна 86. Когда генерирую этот же файл на диск - длина более 13 кб. Идея такова - динамически сгенерировать excel через хранимую процедуру Java в БД Oracle и выдать его в виде raw вызываюшей функции. Помогите пожалуйста.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
 import  jxl.*;
 import  jxl.write.*;
 import  jxl.write.Number;
 import  java.io.*;
 import  oracle.sql.*;
 import  java.sql.*;


 public   class  Class1 {
    // Данные для отчета



     static   int [] num = { 1 , 2 , 3 };
     static  String[] name = {"Кредиты физ. лиц","Депозиты физ. лиц","Ценные бумаги"};
     static   double [] summa = { 160050 . 50 , 5632312 . 778 , 905163 . 19 };

     public   static  String /* byte[] */  ret_xls()
    {
        OutputStream out =  null ;
        InputStream in =  null ;
        Connection con= null ;
         try  {
        
            String driverName = "oracle.jdbc.driver.OracleDriver";
             Class .forName(driverName);
            String serverName = "bree.gondor.fors";
            String portNumber = "1522";
            String sid = "rsmob";
            String url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + sid;
            String username = "resy";
            String password = "resy";       
            con = DriverManager.getConnection(url, username, password);
            
            BLOB blob = BLOB.createTemporary(con, true, BLOB.DURATION_SESSION);
            out = blob.getBinaryOutputStream();            

            // Создаем книгу Excell
            WritableWorkbook wb = Workbook.createWorkbook(out);
            // Создаем лист
            WritableSheet sheet = wb.createSheet("GAP",  0 );
            // Задаем ширину первых трех столбцов
            sheet.setColumnView( 0 , 10 );
            sheet.setColumnView( 1 , 30 );
            sheet.setColumnView( 2 , 20 );
            // Создаем шрифт для данных
            WritableFont font01Normal =  new  WritableFont (WritableFont.ARIAL,  12 , WritableFont.BOLD);
            WritableFont font02Normal =  new  WritableFont (WritableFont.ARIAL,  10 , WritableFont.NO_BOLD);

            // Создаем стиль ячейки для заголовка таблицы
            WritableCellFormat cellstyletableheader =  new  WritableCellFormat (font01Normal);
            cellstyletableheader.setAlignment(Alignment.CENTRE);
            cellstyletableheader.setWrap(true);
            cellstyletableheader.setBorder(Border.ALL, BorderLineStyle.MEDIUM);
            cellstyletableheader.setVerticalAlignment(VerticalAlignment.CENTRE);
            cellstyletableheader.setBackground(Colour.BROWN, Pattern.SOLID);

            // Создаем стиль ячейки для данных в таблице.
            WritableCellFormat cellstyletable =  new  WritableCellFormat (font02Normal);
            cellstyletable.setAlignment(Alignment.LEFT);
            cellstyletable.setWrap(true);
            cellstyletable.setBorder(Border.BOTTOM, BorderLineStyle.THIN);
            cellstyletable.setBorder(Border.LEFT, BorderLineStyle.THIN);
            cellstyletable.setBorder(Border.RIGHT, BorderLineStyle.THIN);
            cellstyletable.setVerticalAlignment(VerticalAlignment.TOP);

            // Дальше рисуем заголовок таблицы
            sheet.addCell( new  Label( 0 , 0 ,"Номер",cellstyletableheader));
            sheet.addCell( new  Label( 1 , 0 ,"Наименование",cellstyletableheader));
            sheet.addCell( new  Label( 2 , 0 ,"Сумма",cellstyletableheader));

            // Шапка заполнена
            // Побежали по массиву.
             int  r =  0 ;
             while  (r <  3 ) 
            {
                // И как и выше пишем данные из массива

                sheet.addCell( new  Number ( 0 , r+ 1 , num[r], cellstyletable));
                sheet.addCell( new  Label ( 1 , r+ 1 , name[r], cellstyletable));

                NumberFormat fivedps =  new  NumberFormat("##########0.00");
                WritableCellFormat fivedpsFormat =  new  WritableCellFormat(fivedps);
                fivedpsFormat.setBorder(Border.ALL, BorderLineStyle.THIN);
                sheet.addCell( new  Number ( 2 , r+ 1 , summa[r], fivedpsFormat));

                r++;
           }

            //добавим итоги
            Formula f =  new  Formula( 2 , 4 , "C2+C3+C4");
            sheet.addCell(f);

            //Дополнительное форматирование
            WritableCell c=sheet.getWritableCell( 0 , 1 );
            WritableCellFormat labelformat =  new  WritableCellFormat ();
            labelformat.setAlignment(Alignment.RIGHT);
            labelformat.setBackground(Colour.BLUE2, Pattern.SOLID);
            c.setCellFormat(labelformat);
            WritableCellFeatures cf= new  WritableCellFeatures();
            cf.setComment("Эта ячейка отформатирована нарочно для примера");
            c.setCellFeatures(cf);

            // Пишем в поток
           
            wb.write();
            wb.close();

            in = blob.getBinaryStream();
             int  length;
             byte [] buf =  new   byte [blob.getChunkSize()];                        
             while  ((length = in.read(buf)) != - 1 ) out.write(buf,  0 , length);
            
             return  ""+blob.getLength();
            //return blob.getBytes();
        }
         catch  (Exception e) {  return  e.getMessage(); }
         finally { 
                  if  (con !=  null )  try {con.close();} catch (Exception ef1){} 
                  if  (in !=  null )   try {in.close();} catch (Exception ef2){} 
                  if  (out !=  null )  try {out.close();} catch (Exception ef3){} 
               }

  
       

    }

 public   static   void  main(String[] args)
{
Class1 c= new  Class1();
System.out.println(c.ret_xls());
}
    
}
...
Рейтинг: 0 / 0
12.07.2006, 11:33
    #33847247
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что не так???
Код: plaintext
blob.getLength();
поменяй на
Код: plaintext
blob.length();
...
Рейтинг: 0 / 0
12.07.2006, 11:36
    #33847266
Yordan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что не так???
Спасибо Timm! Длина блоба стала равной длине файла = 13кб.
...
Рейтинг: 0 / 0
12.07.2006, 11:42
    #33847291
Yordan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что не так???
Странно...если поставить выражение

return ""+(blob.getBytes()).length;

то все равно возвращает 86...Следовательно и массив байтов вернет такой же длины...
...
Рейтинг: 0 / 0
12.07.2006, 12:56
    #33847689
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что не так???
YordanСтранно...если поставить выражение

return ""+(blob.getBytes()).length;

то все равно возвращает 86...Следовательно и массив байтов вернет такой же длины...
дока
...
Рейтинг: 0 / 0
12.09.2006, 15:27
    #33981288
mos
mos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что не так???
Dobryj den!
pocemu formula ne rabotaet, Java rugaetsia na ";"

Formula f = new Formula(2,4, "SUM(C2+C3;C4)");
sheet.addCell(f);
...
Рейтинг: 0 / 0
12.09.2006, 19:33
    #33982261
Кувалдин Роман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что не так???
mosDobryj den!
pocemu formula ne rabotaet, Java rugaetsia na ";"

Formula f = new Formula(2,4, "SUM(C2+C3;C4)");
sheet.addCell(f);

На семиколон джава ругаться не умеет. Она ругается скорее всего на то, что ты бездумно передрал данный исходник, не потрудившись создать класс Formula :-)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Что не так??? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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