PreparedStatement setString

0

Witam

Czy da się jakoś wymusić, aby nie następowało cytowanie String'ów?

Chodzi mi o to, aby poniższy kod wypluł:
UPDATE table SET column = current_timestamp WHERE id = 123
a nie:
UPDATE table SET column = "current_timestamp" WHERE id = 123

PreparedStatement statement = connection.prepareStatement("UPDATE table SET column = ? WHERE id = ?")
statement.setString(1, "current_timestamp"); //setXXXXX? jest cos wrzuciłoby String nie sprawdzając jego poprawnosci?
statement.setInt(2, 123);
System.out.println(statement);

Wiem, że w tym przypadku zamiast setString mogę użyć np. setTimestamp, ale chodzi mi o ogólne użycie PreparedStatement.

0

Mogę się mylić ale chyba w PreparedStatement nie można definiować wartości parametrów dla kolumn, czyli w twoim przypadku dla pierwszego znaku '?'

0

Wpisz current_timestamp w treści zapytania, tzn. od razu przy tworzeniu PreparedStatement ;)

0

preparedStatement ma parametry wlasnie po to zeby Od razu je escapowal, jesli cos to mozna wstawiac stringa bezposrednio do zapytania sql ale to oglnie zmniejszenie stabilnosci i bezpieczenstwa. Dzieki temu tworzy mapy zapytania i lepiej bazka chodzi przy powrotnym ich wykonywaniu,

0

Jeśli przyjąć, że wiem dokładnie co wstawiam to obniżenie bezpieczeństwa i stabilności mi nie grozi.
Jeśli przyjąć, że bazka lepiej chodzi to chętnie bym to wykorzystał.
Jeśli przyjąć, że wstawianie string-a bezpośrednio do zapytania jest mniej czytelne to wole te parametry.

PreparedStatement statement = connection.prepareStatement(
   "UPDATE table SET column = ? WHERE id = ?");
while(....) {
   int id = ...
   if(...)
      statement.setXXXX(1, "current_timestamp");
   else
      statement.setNull(1, java.sql.Types.TIMESTAMP);
   statement.setInt(2, id);
   update.executeUpdate();
}

Jeśli przyjąć, że coś takiego by działało to:

Bezpieczeństwa i stabilności chyba bym w żaden sposób nie obniżył.
Co do wydajności to się nie znam, pewnie lepiej było by zrobić dwa różne statement'y i je odpalać w zależności od if'a.
Jednak taka konstrukcja jest bardzo czytelna.

Zatem bardzo się dziwię, że taka funkcjonalność jest uniemożliwiona - ułatwiła by mi znacznie życie - a może ktoś z was wie jak to moje przykładowe setXXXX() sobie samemu zakodować?

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