Dies sind so viele schlechte Welten, weil Ihre Frage impliziert, dass Ihre Anwendung wahrscheinlich klaffende SQL-Injection- Lücken aufweist.
Sie sollten parametrisierte Anweisungen verwenden. Verwenden Sie für Java PreparedStatement
Platzhalter . Sie sagen, Sie möchten keine parametrisierten Anweisungen verwenden, aber Sie erklären nicht, warum , und ehrlich gesagt muss es ein sehr guter Grund sein, sie nicht zu verwenden, da sie der einfachste und sicherste Weg sind, das von Ihnen versuchte Problem zu beheben lösen.
Siehe Verhindern der SQL-Injektion in Java . Sei nicht Bobbys nächstes Opfer.
In PgJDBC gibt es keine öffentliche Funktion zum Zitieren und Escapezeichen von Zeichenfolgen. Das liegt zum Teil daran, dass es eine gute Idee sein könnte.
Es gibt integrierte Anführungszeichenfunktionen quote_literal
und quote_ident
PostgreSQL, diese gelten jedoch für PL/PgSQL
Funktionen, die verwendet werden EXECUTE
. Diese Tage quote_literal
werden meistens von EXECUTE ... USING
der parametrisierten Version überholt , weil sie sicherer und einfacher ist . Sie können sie nicht für den hier erläuterten Zweck verwenden, da es sich um serverseitige Funktionen handelt.
Stellen Sie sich vor, was passiert, wenn Sie den Wert ');DROP SCHEMA public;--
von einem böswilligen Benutzer erhalten. Sie würden produzieren:
insert into test values (1,'');DROP SCHEMA public;--');
Das besteht aus zwei Aussagen und einem Kommentar, der ignoriert wird:
insert into test values (1,'');
DROP SCHEMA public;
--');
Hoppla, da geht deine Datenbank.