Запрос JDBC, возвращающий ноль при использовании простых арифметических операций и псевдонима, даже если данные в таблице не равны нулю

#java #android #oracle #jdbc

#java #Android #Oracle #jdbc

Вопрос:

Я создаю веб-портал через Android, и запрос, который я выполняю через драйверы JDBC, возвращает 0, где данные не должны быть равны нулю.

Это запрос:

 ResultSet set = statement.executeQuery("select it.itcod,      it.itnam,     it.packn, it.tradp, "  
                    "sum(nvl(itd.slbox,0) - nvl(itd.srbox,0) - nvl(itd.brbox,0) - nvl(itd.gsbox,0)) as sbox, "  
                    "sum(nvl(itd.slbbx,0) - nvl(itd.srbbx,0) - nvl(itd.brbbx,0) - nvl(itd.gsbbx,0)) as sbbx, "  
                    "SUM(NVL(itd.PRBOX,0) - NVL(itd.RPBOX,0) - NVL(itd.TRBOX,0)) as pbox, "  
                    "SUM(NVL(itd.PRBBX,0) - NVL(itd.RPBBX,0) - NVL(itd.TRBBX,0)) as pbbx "  
                    "from items it "  
                    "LEFT join item_daily itd "  
                    "on  (it.cocod = itd.cocod "  
                    "and it.itcod = itd.itcod "  
                    "and ITD.ddate between "   fdate   " and "   tdate   ")"  
                    "WHERE IT.COCOD = "   COCOD  
                    "AND IT.DCODE = "   DCODE  
                    "AND NVL(IT.FREZE,'N')!='Y' "  
                    "group by it.cocod, it.itcod, it.itnam, it.packn, "  
                    "       it.tradp, it.pkqty, it.dcode, it.freze, "  
                    "       it.ishow, it.sltax, it.dcont, it.mcode, "  
                    "       it.nwcod "  
                    "order by itnam ");
  

Я пытался использовать resultset metadata, но это тоже не работает.

Комментарии:

1. можете ли вы запустить его через sql plus / sql developer и посмотреть, дает ли вам желаемый результат?

2. я запустил его через инструмент keep, и это дает мне желаемый результат, поэтому я точно знаю, что данных там нет @pahariayogi

3. Имейте в виду, что если fdate, tdate, COCOD или DCODE получены из пользовательского ввода, то запрос подвержен атаке SQL-инъекцией. Рассмотрите возможность использования PreparedStatement .

Ответ №1:

вы должны быть осторожны с этой строкой

    fdate   " and "   tdate 
  

потому что вы должны использовать вот так:

 " .. to_date('" fdate "','***your_date_format') and to_date('" fdate "','***your_date_format')"
  

Комментарии:

1. я запускал этот запрос через инструмент сохранения, и данные возвращаются нормально.. я тоже пробовал это, но это приводит к другим исключениям

2. вы пробовали мое решение?

3. Я сделал, все еще возвращая ноль, эта ошибка действительно поставила в тупик мое приложение, хотелось бы любых других решений

4. в чем именно заключается ваш запрос? можете ли вы написать это, запустив в редакторе? без параметров?