Zeichen in SQL INSERT Statement maskieren?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Zeichen in SQL INSERT Statement maskieren?

    Hallo!

    Ich möchte aus einem Java Programm Daten in eine SQL Datenbank (genauer gesagt ist es die HSQLDB) einfügen.

    Nun verwende ich dazu folgendes Statement:
    INSERT INTO Tabellenname(spaltenname) VALUES('irgend ein String')

    Soweit funktioniert das auch. Allerdings bekomme ich nun Probleme, wenn der einzufügende String folgendes Zeichen enthält: '

    Dadurch wird das obige Statement natürlich unbrauchbar, weil die Datenbank nach dem zweiten ' meint der Eingabestring ist zu Ende, und nicht mehr mit weiteren Zeichen rechnet.

    Mein erster Tipp war natürlich das entsprechende Zeichen mit einem Backslash zu maskieren, nur funktioniert das scheinbar nicht in SQL. Was muss ich also stattdessen machen?

    Vielen Dank für alle Tipps
    servus
    booster

    P.S.: Der Eingabestring kommt von einer Benutzereingabe, ich kann also nicht verhindern dass einmal ein ' eingefügt wird. Allerhöchstens könnte ich ich jede Eingabe danach durchsuchen und das Zeichen ersetzen. Das würde ich allerdings nur im Notfall so lösen wollen!
  • RE: Zeichen in SQL INSERT Statement maskieren?

    also in PostgreSQL für z.B.

    O´Fragender

    entweder doppelt also:

    insert into tabellenname(spaltenname) values (´O´´Fragender´);


    oder

    insert into tabellenname(spaltenname) values (´O\´Fragender´);



    =)


    Aber wenn Du etwas Anderes verwendest, ich war nicht Schuld ;)
  • Verstehe ich jetzt nicht was Du meinst!
    Booster wollte nur eine SQL Abfrage und da ein Sonderzeichen mit eingeben.

    Du meinst vielleicht (bei Cocoa z.B.) eine Variable mit einem Wert füllen diesen dann abfragen.....

    Also vermutlich folgende Schritte:

    Variable berechnen und dann das SQL-Statement mittels Sringzusammensetzung erstellen......

    Stringkombination:

    developer.apple.com/documentat…/stringByAppendingString_
  • Original von thomas13
    Verstehe ich jetzt nicht was Du meinst!
    Booster wollte nur eine SQL Abfrage und da ein Sonderzeichen mit eingeben.

    Du meinst vielleicht (bei Cocoa z.B.) eine Variable mit einem Wert füllen diesen dann abfragen.....

    Also vermutlich folgende Schritte:

    Variable berechnen und dann das SQL-Statement mittels Sringzusammensetzung erstellen......


    Nein. Das meinte ich nicht.
    Als Beispiel meinte ich das Insert.
    Es wird ein SQL-Statement zusammengebastelt und an die DB geschickt.
    D.h. die DB muss das Statement bei jeder Ausführung neu parsen.
    Nutzt man Bind-Variablen muss sie das nicht, was Last mindert.
    Meine Frage ist nun, wie man das z.B. mit Cocoa macht.
    Was Datenbanken angeht hatte ich mit Cocoa noch nicht das Vergnügen.
    Aber im Prinzip sollte es ja eine Klasse geben der ich ein Statement übergeben kann,
    welches dann ausgeführt wird.
    Einer solchen Komponente würde ich nun gerne ein Statement mit Variablen übergeben
    und diese nachträglich füllen.
    Bei Inserts eher zu vernachlässigen, aber bei häufig ausgeführten Selects nötig.


    Also z.B.

    NSSchießmichtotDB *db;

    [db sql:@"SELECT * FROM TAB_X WHERE ID = :ID"];
    [db setVar:@"ID" value:4711]
    [db execute];
  • Tjaaaaa da gibt es C-Bibliotheken für, libpq_fe.h und so :) von PostgreSQL

    Standardmäßig aus Cocoa gibt es da nichts!


    Da sitzt Tom gerade dran, daraus ein Framework zu machen.

    Ansonsten such hier mal etwas, das hatten wir Ende Januar/Anfang Februar schon ;)

    Oder Du gehst auf die Aaron Hillegass Hompage (Bignerdranch), lädtst Dir BigSQL runter und stöberst etwas....

    CoreData wird ja auf SQLite aufsetzen....
  • Hoppla, das ist ja ne Überraschung.
    Die erste Schwäche die mir auffällt.

    Von der SQLite hab ich noch nie gehört...

    Was ist mit ODBC? Da gibts doch etwas.
    Wie spricht man damit?
    Die c-Libs sind doch nur nötig wenn man direkt mit der DB reden will.
  • Wie willst du denn ohne Lib mit den DBs reden?

    Ich schreibe eine OO-Lib für irgendwas. Das sind veschiedene Schichten.

    App
    (Bindings)
    Framework <----
    Access-Schicht (derzeit nur für Libfe=PostgreSQL) <----
    Lib (Libfe/odbc)
    Client
    Server

    Dar markierte schreibe ich
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Original von Tom9811
    Wie willst du denn ohne Lib mit den DBs reden?


    Na in dem ich ODBC nutze. Ist Mac ODBC nicht mit dem Windoof ODBC vergleichbar?
    Bin db-techninsch grün auf dem Mac.

    Unter Windoof werden ODBC-Treiber installiert und ich kann via ODBC mit der Datenbank reden.
    Klar werden da auch Interfaces bereitgestellt, aber nicht die von Oracle oder MySQL oder <beliebig>.
    Ich rede nur mit ODBC. (Sollte Deiner Access-Schicht entsprechen)
    Das meinte ich.
  • Bei ODBC sieht das so aus:

    App
    --- und was muss hiernhin? ---
    ODBC
    ODBC-Admin
    Client
    Server

    Wenn ich irgendwo im Code bin, muss ich doch eine Methode/Funktion haben, die nun etwas sagt. Es gibt zwar so was wie SQL-In-Source. Aber dahinter verstecken sich freilich auch wieder Funktionen.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Original von Tom9811
    Bei ODBC sieht das so aus:

    App
    --- und was muss hiernhin? ---
    ODBC
    ODBC-Admin
    Client
    Server

    Wenn ich irgendwo im Code bin, muss ich doch eine Methode/Funktion haben, die nun etwas sagt. Es gibt zwar so was wie SQL-In-Source. Aber dahinter verstecken sich freilich auch wieder Funktionen.


    Genau da hätte ich Cocoa vermutet.
    Bleibt nun die Frage wie das ODBC-Interface verwendet werden kann...
    Solte also in etwa so aussehen

    App
    Cocoa (wäre zumindest schön)
    ODBC
    ODBC-Admin
    Libs (bzw. ODBC-Treiber)
    Client
    Server