PreparedStatement - 2 kwerendy wykonane na raz Tak można ?

0

WItam

Moj problem polega na tym że nie mam pomysłu jak optymalnie rozwiązać pewien problem.

Już tłumaczę mam funkcje która mi tworzy dynamicznie kewrendy:

public PreparedStatement query(String start, String koniec) throws SQLException
    {
       Connection con = databaseAccess.getOracleDbConnection();
       String sql = "SELECT kiedy2, wartosc FROM test WHERE kiedy2 >= to_date( ? ,'YYYY-MM-DD HH24:MI') and kiedy2 <= to_date( ? ,'YYYY-MM-DD HH24:MI') ORDER BY kiedy2";
       PreparedStatement prepState = con.prepareStatement(sql);
       prepState.setString(1, start);
       prepState.setString(2, koniec);

       return prepState;
    }

stworzona kwerenda jest parametrem funkcji rysującej wykres. Mam też drugi wykres, którego kwerenda bedzie podobna budową:

SELECT kiedy2, urzadzenia.nazwa, sum(wartosc) AS num_employees FROM urzadzenia, test WHERE test.id_urzadzenia = urzadzenia.id_urzadzenia and kiedy2 >= to_date( ? ,'YYYY-MM-DD HH24:MI') and kiedy2 <= to_date( ? ,'YYYY-MM-DD HH24:MI') GROUP BY urzadzenia.nazwa;

(jak cos w tej kweredndzie jest zwalone to niewazne bo pisalem ja tak z biegu)

... i mam pytanie czy da sie te dwie kwerendy jakoś zmieścic w tej funkcji PreparedStatement query(String start, String koniec) czy najprosciej pod słońcem muszę stworzyć drugą taka dla tej drugiej kwerendy

0

No ja widzę dwa wyjścia, literówki z pewnością bo w Java dawno nie widziałem:

Poza wszystkim zmienić arg metody na getPreparedStatement(Object obj[])

Potem jednym z rozwiązań jest użycie metody szablonowej, czyli przygotowanie samego zapytania delegujesz do klas pochodnych, no a potem w pętli for z tą przekazaną tablicą i w zależności od typu parametru robisz setInt, setString....

Inny sposób, który może być przydatny to przygotowanie sobie klasy w której będziesz budował zapytania i przekazywanie jej obiektu także do metody getPreparedStatement, np. na wzór czegoś takiego:

   class Query {
            
             private String sql;

             public Query select(String[] fieldNames) { 
                    sql .= fieldNames;
                    return this;
             }

             public Query from() {}

             public Query where() {}

            public Query andWhere() {}

            public Query OrWhere() {}
             
             //itd
   }

1 użytkowników online, w tym zalogowanych: 0, gości: 1