# Apostroph(') in Datenbank eintragen



## Emrys-Merlin (28. Apr 2007)

Hey,

Ich wollte mal fragen ob es irgendeine Möglichkeit gibt auch Wörter mit Apostrophen in eine Datenbank einzutragen, weil bei mir kommt da bis jetzt immer ne Fehlermeldung. Ich freue mich über jede Hilfe

Grüße
Merlin


----------



## Leroy42 (28. Apr 2007)

Versuchs mal mit


```
values ("ein'Wort'mit'Apostophen")
```


----------



## Emrys-Merlin (28. Apr 2007)

Also dieser Code-Abschnitt löst in meinem Programm z.B. eine Fehlermeldung aus:


```
database.update(
	      	  "INSERT INTO VOKABELN(Stranger, German, UArtikel, BArtikel, Asked)" +
	      	  " VALUES('olio','Öl','un','l'','0')");
```

Und die passende Fehlermeldung:

java.sql.SQLException: Unexpected token: 0 in statement [INSERT INTO VOKABELN(Stranger, German, UArtikel, BArtikel, Asked) VALUES('olio','Öl','un','l'','0')]

und jetzt würde mich interessieren, wie ich es hinbekommen, dass ich dieses l' eingetragen bekomme ohne, dass das Programm abstürzt.

Merlin


----------



## Leroy42 (28. Apr 2007)

Habe ich doch geschrieben. Benutze Doppelhäkchen:

VALUES('olio','Öl','un',*"*l'*"*,'0')


----------



## Emrys-Merlin (28. Apr 2007)

Oh...
Sorry, hab ich nicht verstanden.


----------



## Leroy42 (28. Apr 2007)

Also nochmal.

Du kannst sowohl Apostrophe(Häkchen) als auch Gänsefüsse(Doppelhäkchen) zur Eintragung von _Strings_ nehmen.

Wenn der String eben ein Häkchen enthält, dann mußt
du diesen mit Doppelhäkchen _einpacken_.

Jetzt frag aber nicht, was du schreiben sollst, wenn
du ein Apostroph _gefolgt von einem_ Doppelhäkchen
eintragen mußt.

Das zeigt die Schwächen dieses Verfahrens.  :autsch:


----------



## Emrys-Merlin (28. Apr 2007)

Sorry, aber das funktioniert nicht, weil wenn ich da jetzt Anführungszeichen drum rum mach dann wir des l' nicht mehr als Teil von diesem string angesehen und die Methode braucht einen String als Parameter...

und wenn ich \"l'\" mache kommt diese Fehlermeldung:
java.sql.SQLException: Column not found: l' in statement [INSERT INTO VOKABELN(Stranger, German, UArtikel, BArtikel, Asked) VALUES('olio','Öl','un',"l'",'0')]


----------



## Leroy42 (28. Apr 2007)

Habe gerade das hier gefunden:



> Das Apostroph ist kein Steuerzeichen mehr, wohl aber der Backslash, der von MySQL entfernt wird, da er ja nicht zu der Eingabe gehört, sondern nur signalisiert, dass das nachfolgende Apostroph kein Steuerzeichen ist.



Versuch's doch einfach mal mit

_values ('ich bin ein Apostroph: \'')_

Edit: Also Backslash gefolgt von einem Apostrophen


----------



## Emrys-Merlin (29. Apr 2007)

Des bringt leider auch nix. Wobei ich auch HSQLDB benutz und nich MySQL.


----------



## SlaterB (29. Apr 2007)

Fehlermeldung?


----------



## Emrys-Merlin (30. Apr 2007)

Also so ist der Code:


```
database.update(
	      	  "INSERT INTO VOKABELN(Stranger, German, UArtikel, BArtikel, Asked)" +
	      	  " VALUES('olio','Öl','un','l\'','0')");
```

Und das ist die Fehlermeldung:

java.sql.SQLException: Unexpected token: 0 in statement [INSERT INTO VOKABELN(Stranger, German, UArtikel, BArtikel, Asked) VALUES('olio','Öl','un','l'','0')]


----------



## Leroy42 (30. Apr 2007)

```
database.update( 
              "INSERT INTO VOKABELN(Stranger, German, UArtikel, BArtikel, Asked)" + 
              " VALUES('olio','Öl','un','l\\'','0')");
```

Du mußt den Backslash maskieren.


----------



## Emrys-Merlin (30. Apr 2007)

Ok, hab ich probiert, aber die Fehlermeldung is immer noch die selbe...


----------



## Leroy42 (30. Apr 2007)

Und das


```
database.update( 
              "INSERT INTO VOKABELN(Stranger, German, UArtikel, BArtikel, Asked)" + 
              " VALUES(\"olio\",\"Öl\",\"un\",\"l'\",\"0\")");
```
geht wirklich nicht?  :shock: 

Dann bin ich mit meinem Latein auch am Ende.


----------



## Guest (30. Apr 2007)

Verwende PreparedStatements und lass der Treiber das richtige Format wählen.


----------



## Emrys-Merlin (30. Apr 2007)

Kannst du mir das vielleicht etwas einfacher erklären, ich bin Neueinsteiger, was Datenbanken angeht und hab dementsprechend wenig Ahnung was ich überhaupt tue :lol:  Kannst du vielleicht ein Programmbeispiel reinstellen oder so? 

Merlin


----------



## Guest (30. Apr 2007)

So ungefähr
	
	
	
	





```
Connection con = null;
PreparedStatement stmt = null;
try
{
   con = getConnection(); // woher auch immer du die Connection hast
   stmt = con.prepareStatement(
      "INSERT INTO Vokabeln(Stranger, German, UArtikel, BArtikel, Asked) VALUES(?, ?, ?, ?, ?)" 
      // Die Fragezeichen sind Platzhalter für die Parameter, die in den folgenden Zeilen erst 
      // gesetzt werden (siehe java.sql.PreparedStatement)
   );
   stmt.setString(1, "olio"); // Beachte, dass der Index der Parameter bei JDBC immer mit 1 anfängt, nicht mit 0
   stmt.setString(2, "Öl");
   stmt.setString(3, "un");
   stmt.setString(4, "I'"); // <-- Hier dein String mit Anführungszeichen
   stmt.setString(5, "0");
   stmt.executeUpdate();
   ...
}
catch(SQLException e)
{
   Logger.fatal(e);
}
finally
{
   // Statement und Connection wieder freigeben
   if(stmt != null)
   {
      try
      {
         stmt.close();
      }
      catch(SQLException e)
      {
         Logger.error(e);
      }
   }
   if(con != null)
   {
      try
      {
         con.close();
      }
      catch(SQLException e)
      {
         Logger.error(e);
      }
   }
}
```


----------



## Guest (30. Apr 2007)

Kleine Korrektur. Bei der ersten Exception solltest du dann eine eigene Exception werfen, 
den Fehler genauer beschreibt, sonst kriegt man es ausserhalb der Methode nicht mit, dass
das Update gescheitert ist.


----------



## Emrys-Merlin (30. Apr 2007)

Cool!!!
Vielen Dank für den Tipp, der hat das Problem endlich gelöst!!! Ich hätte nicht gedacht, dass das so einfach zu lösen ist.
Nochmal vielen Dank

Gruß
Merlin


----------



## SlaterB (30. Apr 2007)

wäre schön, wenn du irgendwie an ein SQL-Log der DB kommst 
und den letztlich akzeptierten SQL-Code posten könntest


----------

