Как извлечь значение из результирующего набора двух операторов, которые являются объединением - PullRequest
0 голосов
/ 24 сентября 2010

У меня есть метод в классе дао, который называется "getDetails" .В этом методе я объединяю два оператора выбора из двух таблиц с почти одинаковым полем, называемым "основной магазин" & "подшопы" и поставить эти вопросы в подготовленное заявление.Затем я помещаю подготовленное состояние в resultSet.

Этот "getDetials" метод return "details" и I 'Я буду использовать его в другом методе посредника, который называется "writefile" , чтобы напечатать значения в слове microsoft, например "writefile (details)" .В методе «writefile» есть строки значений и помещают значения «details» в соответствующую строку.И добавьте «outputString» для каждого значения.

На экране ввода пользователь может проверить «sub shop» флажок и заполнит детали "суб-магазинов" после проверки его.Если они не проверяют, им нужно заполнить только "основные данные" , а не "суб-магазины" .Если они проверяют "основной магазин" , мне нужно напечатать только одно письмо.Если они проверяют «субмагазины» и заполняют «количество субмагазинов» , мне нужно напечатать буквы там, где буквычисло равно «количество субмашин» + один (главная буква).Формат письма полностью такой же, но меняются только значения полей "название магазина" (основной или вспомогательный магазин), "код банковского магазина" (основной или вспомогательный магазин) по выбору пользователя.

В посреднике я зацикливаю «файл записи (подробности)» в соответствии сколичество «подмагазинов» .

Проблема в том, что данные разными буквами одинаковы (показываются только данные "основной магазин" ), хотя количество букв правильное (например, если естьдва «подмагазина» , на нем печатаются три буквы).Как мне поступить, чтобы получить значение "sub shop" в последующих письмах после "main shop" печатного письма.

Это метод "writefile"

if(flag){
this.getHeading();
StringBuffer outputString = new StringBuffer();
Date date = new Date();
 SimpleDateFormat formatter=new SimpleDateFormat("dd MMMMM,yyyy");
          String dateString=formatter.format(date);
          details.sysDate =dateString;
          String date1=(String)details.getSysDate();

if(details.getNo() != null){
no=details.getNo();
}else {no=" ";}
if(details.bankName() != null){
bname=details.getBankName();
}else {bname = " ";}

outputString.append('\"');
outputString.append(date1);
outputString.append('\"');
outputString.append(",");
outputString.append('\"');
outputString.append(no);
outputString.append('\"');
outputString.append(",");
outputString.append('\"');
outputString.append(bname);
outputString.append('\"');
outputString.append(",");
outputString.append('\"');

dos.writeBytes(outputString.toString());
dos.flush();
dos.close();
fos.close();
}

Пример запроса

    public Details getDetails (String No, String LoginID, String LetterID)
    {
        connection = DBConnection.getConnection();
                StringBuffer query = new StringBuffer();
                query.append("select TO_CHAR(TRUNC(SYSDATE),'DD MONTH,YYYY'),a.no, b.bank_name");
                query.append("from t_newappl a,t_newappl_bank b where b.no = a.no and a.no=(select no from t_newappl whereno=?) and rownum=1 and status = 'PEND'");
                query.append(" union all ");
                query.append("select TO_CHAR(TRUNC(SYSDATE),'DD MONTH,YYYY'),a.no,b.bank_name");
                query.append("from t_newappl a,t_newappl_bank b, newappl_sub c, t_newappl_sub_bank d where a.no = c.no and c.sub_id= d.sub_id and a.no=(select no from t_newappl where no=?) and rownum=1 and d.status = 'SPEND'");
                PreparedStatement preparedStatement = connection.prepareStatement(query.toString());
                preparedStatement.setString(1,ApplicationNo);
                preparedStatement.setString(2,ApplicationNo);
                ResultSet resultSet = preparedStatement.executeQuery();
                while (resultSet.next()){
                   Details = new BankDetails();
                    Details.No= Util.Trim(resultSet.getString("NO"));
                    Details.BankName= Util.Trim(resultSet.getString("BANK_NAME"));          

                }

                resultSet.close();
                preparedStatement.close();

        return Details;
}

Цикл для печати письма

    int retail = Outletht.size();
                                            int ctr = 0;
                                             for (int i = 1; i <= subshop.size ; i++ ){
                                                  ctr++;
                                                  Letter Letter = new Letter(lmediator);
                                                 BankDetails Details = Letter.printLetter(applicationNumber);
                                                  if (Details!=null){
                                                    if (ctr == 1) {
                                                        if ((Details.getNo() == null)
                                                                && (Details.getLetterID() == null)
                                                                && ((Details.getLoginID() == null) || (Details.getLoginID().equals("")))) {
                                                        } else {
                                                            Letter.databaseUpdate(Details);
                                                        }
                                                    }

                                                                     Letter.writefile(Details);                                            
                                                  Letter.callfile(Details);
                                                  context.showMessage("I01015");                                                     

                                                    }                                         
                                                else
                                                {
                                                    context.showMessage("I04004");
                                                }
                        }

1 Ответ

0 голосов
/ 24 сентября 2010

Ваш вопрос немного сложен для понимания.Некоторые примеры выходных запросов могут помочь уточнить.

Если у вас возникли проблемы с различием различий между основной и вспомогательной записями, я бы посоветовал вам добавить столбец к вашему запросу до объединения.

selectA, B, 'main' как xtype из объединения T1 все выбирают A, B, 'sub' как xtype из T2

A    B    xtype
---  ---  ---
aaa  bbb  main
bbb  ccc  sub
...