Zmiana wartości zmiennej w kodzie przy warunku IF?

0

Cześć. Poszukuje rozwiązania do mojego problemu. Potrzebuje zmienic wartość zmiennej isTrue tak jak to dodałem w kodzie gdy komórka available w mojej bazie ma wartość '0'. Innymi słowy czy samochód jest dostępny czy nie jest.
Jest taka możliwość? Jeżeli nie, to jak to obejść i jak zrobić by przerwało się wykonywanie dalej metody, gdy samochód jest niedostępny.

public void rentACar(RentingACar rentingACar) throws SQLException {
        boolean isTrue = false;
        {
            String sql = "SELECT IF(available='1',isTrue = TRUE ,isTrue=FALSE ) FROM car";
            statement.execute(sql);

        }
        if (isTrue) {
            preparedStatement = connection.prepareStatement("insert into rentcar" + "(brand,namee,surname,rentDate,clientNumber)" + "values(?,?,?,?,?)");
            preparedStatement.setString(1, rentingACar.getBrand());
            preparedStatement.setString(2, rentingACar.getName());
            preparedStatement.setString(3, rentingACar.getSurname());
            preparedStatement.setString(4, rentingACar.getRentDate());
            preparedStatement.setInt(5, rentingACar.getClientNumber());
            preparedStatement.executeUpdate();

            preparedStatement = connection.prepareStatement("update car " + " set available='0'" + " where brand= ? ");
            preparedStatement.setString(1, rentingACar.getBrand());
            preparedStatement.executeUpdate();
        } else {
            System.out.println("There is no " + rentingACar.getBrand() + "in our car rental!");
        }
    }
1

ale jak nazwę zmiennej? Możesz jedynie wartość zmienić, nazwy nie mogą być zmieniane z samej zasady czym jest nazwa.

0

O matko, co ja tam napisałem.
Tak wartość zmiennej tej: boolean isTrue = false; . Chciałbym zrobić by była ona True, jeżeli komórka w kolumnie available ma wartość '1'

1

Pomieszałeś koncepty - kod SQL nie ma pojęcia o żadnych zmiennych w Javie, więc powinieneś najpierw zrobić zapytanie SELECT:

SELECT
  is_available

FROM
  cars

WHERE
  id=...

... a potem pobrać jego rezultat i dopiero przypisać do zmiennej.

0
Patryk27 napisał(a):

Pomieszałeś koncepty - kod SQL nie ma pojęcia o żadnych zmiennych w Javie, więc powinieneś najpierw zrobić zapytanie SELECT:

SELECT
  is_available

FROM
  cars

WHERE
  id=...

... a potem pobrać jego rezultat i dopiero przypisać do zmiennej.

Coś koło tego? Wiem, ze nie działa, ale nie wiem jak to do końca zrobić.

public void rentACar(RentingACar rentingACar) throws SQLException {
        boolean isAvailable;
        {
            preparedStatement=connection.prepareStatement("SELECT available FROM car WHERE available='1' AND brand=?");
            preparedStatement.setString(1,rentingACar.getBrand());
            isAvailable = preparedStatement.execute();
        }

///edit widzę, że isAvailablezwraca true, a dlaczego? :D

0

może byś tak najpierw do google spojrzał albo do dokumentacji co? https://stackoverflow.com/questions/9123084/how-to-execute-a-sql-statement-with-a-variable-as-where

0
mr_jaro napisał(a):

może byś tak najpierw do google spojrzał albo do dokumentacji co? https://stackoverflow.com/questions/9123084/how-to-execute-a-sql-statement-with-a-variable-as-where

Identycznie mam zrobione wyświetlanie wszystkich aut, klientów itp.
Ale Patryk mi napisał, bym jakoś przypisał wynik do zmiennej i tego nie ogarniam .
Bo mam ten rezultat w zmiennej np. result i co z tym?

0

Może coś koło tego?

boolean isAvailable;
        {
            preparedStatement = connection.prepareStatement("SELECT available FROM car WHERE available='1' AND brand=?");
            preparedStatement.setString(1, rentingACar.getBrand());
            result = preparedStatement.executeQuery();
        }
        while (result.next()) {
            isAvailable = result.getBoolean("available");
            System.out.println(isAvailable);
        }
        
0

Nie wiem czy dobrze zrobiłem, że dałem w bazie danych typ available jako String? Nie powinienem tego zmienić na BIT()?

1
jajko1233 napisał(a):

...

@yarel: a wiesz jak poprawić to co mam teraz? - jajko1233 41 minut temu

Problemów jest kilka.

  1. Optymalność zapytania SQL - wykonanie count(0) czy wyszukanie 1-go pasującego wiersza zależy od silnika bazodanowego i może być różnie przez silnik realizowane. Przed optymalizacją wydajności skupiłbym się na Twoim miejscu na poprawności rozwiązania.

  2. W obecnej postaci i tak iterujesz po wszystkich wierszach spełniających warunek podany w zapytaniu. Jak chcesz mieć 1 wiersz zwracany przez zapytanie, to potrzebujesz to powiedzieć mysqlowi przez dodanie "limit 1" do zapytania.

  3. Twój kod nie wygląda na bezpieczny dla równoległych sesji... Powinieneś zablokować modyfikowany wiersz (tj. zrozumieć jak działa SELECT FOR UPDATE) i dopiero wówczas robić update na tym wierszu. Dzięki temu unikniesz sytuacji, że dwie równoległe sesje zarezerwują ten sam samochód.

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