BG Development


Страници: (2) [1] 2   ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> Проблем с заявка към JDBC Derby
Meniak
Публикувано на: 05-11-2018, 13:45
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 12
Регистриран на: 05.11.18



Здравейте, пускам заявка към база данни JDBC Derby която трябва да ми изведе сумата на полетата total и profit от
таблицата dailysale който се намират м/у посочените дати, и така написана заявката работи.

SQL
"SELECT sum(total) as t, sum(profit) as p FROM dailysale WHERE dateadded BETWEEN '" 01.11.2018 "' AND '"05.11.2018 "'";


Когато обаче променя датите в заявката да са в различен месец ( '" 01.10.2018 "' AND '"05.11.2018 "'"; ) заявката не намира записи.

Това мнение е било редактирано от Meniak на 05-11-2018, 14:07
PMEmail Poster
Top
wqw
Публикувано на: 05-11-2018, 14:18
Quote Post


Group Icon
Име: Владимир Висулчев
Група: VIP
Ранг: Почетен член

Мнения: 5885
Регистриран на: 10.06.04



Пробвай датите да са ISO кодирани:
CODE
Date and time expressed according to ISO 8601 [refresh]

Date                    2018-11-05

Date and time in UTC    2018-11-05T11:50:57+00:00
                        2018-11-05T11:50:57Z
                        20181105T115057Z

Week                    2018-W45

Date with week number   2018-W45-1

Date without year       --11-05[1]

Ordinal date            2018-309

. . .демек при тебе
SQL
... WHERE dateadded BETWEEN '2018-10-01' AND '2018-11-55';

И вземи понамали тези кавички. . . къде двойни къде единични се слагат е добре да си ги изясниш, особено ако лепиш стрингове за заявката.

cheers,
</wqw>


--------------------
PMEmail PosterUsers Website
Top
Meniak
Публикувано на: 05-11-2018, 14:46
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 12
Регистриран на: 05.11.18



Това беше първото нещо което направих след като видях проблема. За да стане по ясно показвам метода в който е заявката

CODE

private void sales() {
       String fromDate = this.datePicker.getEditor().getText();
       String toDate = this.datePicker1.getEditor().getText();

       String sql = "SELECT sum(profit) as p, sum(total) as t FROM dailysale WHERE dateadded BETWEEN '" + fromDate + "' AND '" + toDate + "'";
       try (ResultSet rs = DBConnection.getInstance().executeQuery(sql)) {
           if (rs.next()) {

               double _profit = rs.getDouble("p");
               this.profit.setText(String.valueOf(_profit));

               double _total = rs.getDouble("t");
               this.sales.setText(String.valueOf(_total));
           }
       } catch (SQLException e) {
           System.out.println(e.getMessage());
       } catch (Exception e) {
           System.out.println(e.getMessage());
       }
   }


Това мнение е било редактирано от Meniak на 05-11-2018, 15:06
PMEmail Poster
Top
thrawn
Публикувано на: 05-11-2018, 15:11
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1906
Регистриран на: 17.01.17



Научи се да ползваш коректно JDBC щото така кодът ти е силно наивен.

Това FX ли е?

CODE
private void sales() {
   String sql =
           "SELECT sum(profit) as p, sum(total) as t " +
           "FROM dailysale WHERE dateadded BETWEEN ? AND ?";
           
   try (PreparedStatement statement = ... getConnection().prepareStatement(sql)) {
       statement.setDate(1, datePicker.getValue());
       statement.setDate(2, datePicker1.getValue());
       
       try (ResultSet rs = statement.executeQuery()) {
           while (rs.next()) {

               double _profit = rs.getDouble("p");
               this.profit.setText(String.valueOf(_profit));

               double _total = rs.getDouble("t");
               this.sales.setText(String.valueOf(_total));
           }
       }
   } catch (SQLException e) {
       System.out.println(e.getMessage());
   } catch (Exception e) {
       System.out.println(e.getMessage());
   }
}
PMEmail Poster
Top
wqw
Публикувано на: 05-11-2018, 15:38
Quote Post


Group Icon
Име: Владимир Висулчев
Група: VIP
Ранг: Почетен член

Мнения: 5885
Регистриран на: 10.06.04



QUOTE (Meniak @ 05-11-2018, 14:46)
За да стане по ясно показвам метода в който е заявката

Къде тука
CODE
      String fromDate = this.datePicker.getEditor().getText();
      String toDate = this.datePicker1.getEditor().getText();

      String sql = "SELECT sum(profit) as p, sum(total) as t FROM dailysale WHERE dateadded BETWEEN '" + fromDate + "' AND '" + toDate + "'";

. . . има форматиране на ISO дати?

Btw, направи го с placeholder-и параметризирани заявки както thrawn ти казва, за да нямаш никакви проблеми от това естество.

cheers,
</wqw>


--------------------
PMEmail PosterUsers Website
Top
Meniak
Публикувано на: 05-11-2018, 16:04
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 12
Регистриран на: 05.11.18



Благодаря ще го пробвам. Не разбирам отJDBC но като гледам какво са ми дали да правя май че трябва да се запознаем. Да FX e, уж трябваше UI-то да оправям а кво стана icon_lol.gif
PMEmail Poster
Top
thrawn
Публикувано на: 05-11-2018, 16:07
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1906
Регистриран на: 17.01.17



Имай в предвид, че е желателно тия работи да се правят в отделна нишка. А самия FX ще те наплюе ако се опитваш да бъзикаш данните в него от друга нишка.
PMEmail Poster
Top
Meniak
Публикувано на: 05-11-2018, 17:13
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 12
Регистриран на: 05.11.18



Същия резултат, посоча ли дата от другия месец не намира нищо.

Не мога да използвам DatePicker.getValue(); защото формата на датата е зададен да е dd.MM.yyyy а това ми взема датата в формат yyyy-MM-dd. Полетата в базата дето се въвежда датата са тип String и не мога да си форматирам датата както ми е кеф, или ако стринговете съвпадат трябва да има резултат и има докато не задам дата от другия месец.
PMEmail Poster
Top
thrawn
Публикувано на: 05-11-2018, 18:01
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1906
Регистриран на: 17.01.17



Значи почваш да поправяш бозите. Колоните трябва да са в коректен тип, ако искаш да поравиш (лесно) операции с тях.

Иначе, date and time api то в Джава си предлага инструменти за конвертиране от / до стринг но те се ползват само за форматиране на данните които се показват на поттебителите.
PMEmail Poster
Top
Gamma Goblin
Публикувано на: 05-11-2018, 19:31
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1427
Регистриран на: 21.02.18



QUOTE (Meniak @ 05-11-2018, 13:45)
Здравейте, пускам заявка към база данни JDBC Derby която трябва да ми изведе сумата на полетата total и profit от
таблицата dailysale който се намират м/у посочените дати, и така написана заявката работи.

SQL
"SELECT sum(total) as t, sum(profit) as p FROM dailysale WHERE dateadded BETWEEN '" 01.11.2018 "' AND '"05.11.2018 "'";


Когато обаче променя датите в заявката да са в различен месец ( '" 01.10.2018 "' AND '"05.11.2018 "'"; ) заявката не намира записи.

това име ми е познато - нямаше ли друг акаунт тука “


--------------------
Напред! Живота е сраженье! Напред! И прав всегда ходи!
Напред, макар към поражение! Ако ще паднеш, прав падни!
---
Raw, and untamed in spirit, We chew this world and Spit it out
---
Challenge my own world to chaos
---
“I overcame myself, the sufferer; I carried my own ashes to the mountains; I invented a brighter flame for myself.”
PMEmail PosterUsers Website
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (2) [1] 2  Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2018 | BG Development | All Rights Reserved
RSS 2.0