Skomplikowane zapytanie do bazy danych - Insert i wiele selectów

0

Mam bazę danych, do której obsługi dorobiłem interface w javie. Przede mną ostani krok - chyba najtrudniejszy. Program rozlicza obecności pracowników. Jest tabela grafik pozwalająca wpisać bieżacy stan i tabel rozliczenie generująca podsumowanie. Do podsumowania dane są przekazywane przez kod, który zamieszczam poniżej.

INSERT INTO rozliczenie(id_pracow, liczba_dni_przepracowanych, liczba_dni_nieobecnosci, liczba_dni_urlopu, liczba_dni_choroby)
VALUES
((SELECT id_pracownika FROM pracownicy WHERE imie='Bogdan' AND nazwisko='Nowak' ),(SELECT COUNT(*) FROM grafik WHERE status='1' AND id_pracownika='1' AND czy_rozliczony='0' ),(SELECT COUNT(*) FROM grafik WHERE status='2' AND id_pracownika='1' AND czy_rozliczony='0'),(SELECT COUNT(*) FROM grafik WHERE status='3' AND id_pracownika='1'AND czy_rozliczony='0'),(SELECT COUNT(*) FROM grafik WHERE status='4' AND id_pracownika='1' AND czy_rozliczony='0')),

((SELECT id_pracownika FROM pracownicy WHERE imie='Cezary' AND nazwisko='Kowalski'),(SELECT COUNT(*) FROM grafik WHERE status='1' AND id_pracownika='2'AND czy_rozliczony='0'),(SELECT COUNT(*) FROM grafik WHERE status='2' AND id_pracownika='2' AND czy_rozliczony='0'),(SELECT COUNT(*) FROM grafik WHERE status='3' AND id_pracownika='2' AND czy_rozliczony='0'),(SELECT COUNT(*) FROM grafik WHERE status='4' AND id_pracownika='2' AND czy_rozliczony='0')),

((SELECT id_pracownika FROM pracownicy WHERE imie='Anna' AND nazwisko='Pawlak' ),(SELECT COUNT(*) FROM grafik WHERE status='1' AND id_pracownika='3' AND czy_rozliczony='0'),(SELECT COUNT(*) FROM grafik WHERE status='2' AND id_pracownika='3' AND czy_rozliczony='0'),(SELECT COUNT(*) FROM grafik WHERE status='3' AND id_pracownika='3' AND czy_rozliczony='0'),(SELECT COUNT(*) FROM grafik WHERE status='4' AND id_pracownika='3' AND czy_rozliczony='0')),

((SELECT id_pracownika FROM pracownicy WHERE imie='Agnieszka' AND nazwisko='Orlowska' ),(SELECT COUNT(*) FROM grafik WHERE status='1' AND id_pracownika='4' AND czy_rozliczony='0'),(SELECT COUNT(*) FROM grafik WHERE status='2' AND id_pracownika='4' AND czy_rozliczony='0'),(SELECT COUNT(*) FROM grafik WHERE status='3' AND id_pracownika='4' AND czy_rozliczony='0'),(SELECT COUNT(*) FROM grafik WHERE status='4' AND id_pracownika='4' AND czy_rozliczony='0')),

((SELECT id_pracownika FROM pracownicy WHERE imie='Joanna' AND nazwisko='Tomczyk' ),(SELECT COUNT(*) FROM grafik WHERE status='1' AND id_pracownika='5' AND czy_rozliczony='0'),(SELECT COUNT(*) FROM grafik WHERE status='2' AND id_pracownika='5' AND czy_rozliczony='0'),(SELECT COUNT(*) FROM grafik WHERE status='3' AND id_pracownika='5' AND czy_rozliczony='0'),(SELECT COUNT(*) FROM grafik WHERE status='4' AND id_pracownika='5' AND czy_rozliczony='0'));

Chciałbym taką komendę móc umieścic w kodzie JDBC. Szukam w necie już drugi dzień i efektów zero. Czy ktoś mógłby podrzucić jakiś pomysł lub sugestię? Ten kod naprawdę działa w PGAdmin3.

1

A nie możesz tego zapytania przepisać używając GROUP BY id_pracownika?

0

Chyba nie do końca rozumiem co masz na myśli.

1

Nie analizowałem zapytania, bo wygląda przerażająco. Ale niezależnie od długości zapytania możesz to zrobić tak:

String query = //Twoje zapytanie
st.executeUpdate(query);

st jest typu Statement.

0
bogdans napisał(a):

Nie analizowałem zapytania, bo wygląda przerażająco. (..).

Chyba najpierw spróbuję to zapytanie poprawić. Sądzę, że da się to zrobić inaczej.

bogdans napisał(a):
Strong query = //Twoje zapytanie
st.executeUpdate(quiery);

Czy nie powinno być String zamiast Strong??

1

String ;) Poza tym używaj PreparedStatement, bo jak Ci ktoś w polu formularza wpisze coś typu "DROP ALL TABLES" to sie mocno zdziwisz ;)

0

Jakoś pokonałem javę ale mam błąd sql;

org.postgresql.util.PSQLException: ERROR : syntax error at or near "(" Pozycja: 212

Jak mam czytać to :"Pozycja 212" ???

0

212 znak w Stringu tworzącym zapytanie.

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