2016-09-08 3 views
-2

Ich habe eine SQLite-Datenbank, die Strings enthält. Ich lese diese Zeichenfolgen von meiner Javafx-Schnittstelle. Alles funktioniert reibungslos, aber mein Problem ist, wenn ich versuche, Strings mit Apostroph zu lesen. Mein Code die Saiten zum Lesen ist die folgende:Sqlite lesen Text mit Apostroph

String sql = "select * from Questions where Subject = ? and Grade = ? and Level = ? and questionId = ?"; 
PreparedStatement pst = gui.connectionQuestions.prepareStatement(sql); 
pst.setString(1,gui.textSubjectQTest); 
pst.setString(2,gui.showGradeLabel.getText()); 
pst.setString(3,gui.showCurrentLevelLabel.getText()) 
pst.setString(4,list.get(counter)); 
ResultSet rs = pst.executeQuery(); 
if(rs.next()) 
{ 
     String temp = rs.getString("Question"); 
     gui.question.setText(temp); 
     ... 
     sql = "Update Questions set Used ='"+1+"' where Question = '"+gui.question.getText().replaceAll("'", "/'")+"'"; 
     pst = gui.connectionQuestions.prepareStatement(sql); 
     pst.execute(); 

In dem obigen Code, den ich eine Abfrage peform die Frage Zeichenfolge zurückzukehren und es zu einem Label gui.question hinzuzufügen. Jedoch aufgrund der Apostroph ich folgende Fehlermeldung erhalte (Ich habe den Fehler aufgrund der letzten Zeile):

[sqlite_error] SQL-Fehler oder fehlende Datenbank (in der Nähe „(“: Syntaxfehler)

ich habe versucht, die Lösung from here, aber mein prob noch folgen bleibt Wie kann ich die Sache mit dem Apostroph lösen

EDIT:.? ich Charakter mit doppelseitigem Apostroph zu entkommen versucht Dieser Ansatz funktioniert, aber es ändert sich meine String. um Apostroph zu verdoppeln, was nicht nützlich ist.

+2

Wo bekommen Sie den Fehler, und was sind die Werte hier? –

+0

Ich bearbeite meine Frage, ich erhalte den Fehler in der pst.execute(); – konstantin

+1

Ah - in dem Code, den du vorher noch nicht gepostet hast. Ja, Sie sollten auch parametrisiertes SQL verwenden. * Verwenden Sie immer parametrisiertes SQL, anstatt unbekannte Werte direkt in die SQL-Zeichenfolge einzuschließen. Es ist unklar, warum Sie parametrisierte SQL für die erste Abfrage verwenden würden, aber dann aufhören für die zweite ... –

Antwort

1

Das Anführungszeichen oder das Apostroph wird durch doubling it umgangen.

BTW Sie brauchen nicht die if (temp.contains("'")).

+0

Das doppelte Apostroph funktioniert, aber es ist eine Katastrophe für mich, da die Fragen mathematische Fragen sind und sie die Bedeutung ändern die Fragen. Der Apostroph ist für Derivate. – konstantin

+0

@konstantin Sorry, ich habe deine ursprüngliche Frage wahrscheinlich zu schnell gelesen und das Problem falsch verstanden. Ich werde es später noch einmal versuchen. Übrigens empfehle ich Ihnen, die im Kommentar zu Ihrer Frage gestellte Information anzugeben. – SantiBailors

+0

@konstantin Ich bin verwirrt von Ihrem Codebeispiel. Escape-Anführungszeichen sind beim Erstellen einer SQL-Anweisung erforderlich. Stattdessen entkommen Sie _ nachdem Ihr SQL erstellt und ausgeführt wurde. Ich verstehe also nicht, wie sich das Entweichen oder andere Änderungen an Ihrem Escaping-Code auf die Ausführung von SQL auswirken können. Ihre Escaped-Zeichenfolge wird nur zum Festlegen eines GUI-Felds verwendet. Sie sollten die Informationen, die Sie im Kommentar zu Ihrer Frage eingeben, wirklich hinzufügen. – SantiBailors