2009-06-04 21 views
2

Ich füge Text aus einer Java-Anwendung in eine Postgresql-Datenbank ein, aber alles stürzt ab, wenn ein Zeichen in der Zeichenfolge gefunden wird. Ich habe versucht, replaceAll ("'", "\\'") zu verwenden; sogar verschiedene Varianten davon mit mehr \ chars, aber es setzt immer noch eine einzige 'in der Zeichenfolge ohne das Escape-Zeichen.String mit einfachen Anführungszeichen aus Java in Postgresql einfügen

Gibt es eine Möglichkeit, die 'mit einem' im String zu ersetzen? Oder eine andere Möglichkeit, Strings mit einfachen Anführungszeichen in Postgresql zu setzen?

+0

Ich habe ein ähnliches Problem, ich benutze Hibernate-Abfragen und beim Versuch, einzufügen, wenn ein Feld einfache Anführungszeichen enthält, wird eine Ausnahme ausgelöst –

Antwort

15

shouldn Sie suchen würde Wenn Sieverwenden, müssen Sie sich darüber keine Gedanken machen 10 richtig.

+1

+1 für vorbereitete Aussagen. Das sind wirklich die richtigen Methoden, dies zu tun. – Joey

+1

+1 für vorbereitete Aussagen von mir auch. Seien Sie vorsichtig, wenn Sie sich SQL-Injection-Angriffen aussetzen. –

+2

Danke, ich folgte Ihrem Rat und änderte es in eine richtig vorbereitete Aussage, stellte sich heraus, dass ich es falsch verwendete. Dadurch wurde das Problem behoben. – Malthan

2

Die meisten SQL-Implementierungen verwenden '' (2 einfache Anführungszeichen), um ein einzelnes Zitat zu vermeiden.

Beispiel:

SELECT * FROM users WHERE f_name='foo''bar'; 

Oder Sie doppelte Dollarzeichen verwenden:

Beispiel:

SELECT * FROM users WHERE f_name=$$foo''bar$$; 

Beide Anweisungen für die Zeichenfolge Foo'bar

+0

Ja, das ist eine Funktion von Standard-SQL und PostgreSQL unterstützt dies. Siehe http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-CONSTANTS –

+2

Sie möchten jedoch weiterhin Bindevariablen und vorbereitete Anweisungen verwenden. – Thilo

+0

Danke, das hat perfekt funktioniert. – Malthan

Verwandte Themen